summaryrefslogtreecommitdiff
path: root/devel/electron5/files
diff options
context:
space:
mode:
Diffstat (limited to 'devel/electron5/files')
-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
749 files changed, 31215 insertions, 0 deletions
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