From 34b1a591f7c14ead862dcafc9eae397ab18b972b Mon Sep 17 00:00:00 2001 From: kemonine Date: Thu, 12 Nov 2020 14:03:35 -0500 Subject: [PATCH] Import zmk sources for future tidbit work --- zmk/.clang-format | 4 + zmk/.devcontainer/.bashrc | 8 + zmk/.devcontainer/Dockerfile | 11 + zmk/.devcontainer/devcontainer.json | 11 + zmk/.gitattributes | 6 + zmk/.github/workflows/build.yml | 90 + zmk/.github/workflows/clang-format-lint.yml | 29 + zmk/.github/workflows/doc-checks.yml | 35 + zmk/.github/workflows/test.yml | 70 + zmk/.gitignore | 8 + zmk/.vscode/settings.json | 6 + zmk/.vscode/tasks.json | 28 + zmk/AUTHORS | 11 + zmk/CODE_OF_CONDUCT.md | 128 + zmk/CONTRIBUTING.md | 120 + zmk/LICENSE | 21 + zmk/README.md | 14 + zmk/app/.gitignore | 1 + zmk/app/CMakeLists.txt | 70 + zmk/app/Kconfig | 327 + zmk/app/boards/Kconfig | 1 + .../boards/arm/bluemicro840/CMakeLists.txt | 8 + zmk/app/boards/arm/bluemicro840/Kconfig | 8 + zmk/app/boards/arm/bluemicro840/Kconfig.board | 8 + .../boards/arm/bluemicro840/Kconfig.defconfig | 33 + .../bluemicro840/arduino_pro_micro_pins.dtsi | 52 + .../arm/bluemicro840/bluemicro840_v1.dts | 120 + .../arm/bluemicro840/bluemicro840_v1.yaml | 15 + .../bluemicro840/bluemicro840_v1_defconfig | 20 + zmk/app/boards/arm/bluemicro840/board.cmake | 5 + zmk/app/boards/arm/dz60rgb/CMakeLists.txt | 7 + zmk/app/boards/arm/dz60rgb/Kconfig.board | 6 + zmk/app/boards/arm/dz60rgb/Kconfig.defconfig | 14 + zmk/app/boards/arm/dz60rgb/board.cmake | 7 + zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.dts | 88 + .../boards/arm/dz60rgb/dz60rgb_rev1.keymap | 25 + zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.yaml | 19 + .../boards/arm/dz60rgb/dz60rgb_rev1_defconfig | 27 + zmk/app/boards/arm/dz60rgb/pinmux.c | 67 + zmk/app/boards/arm/nice_nano/CMakeLists.txt | 8 + zmk/app/boards/arm/nice_nano/Kconfig | 7 + zmk/app/boards/arm/nice_nano/Kconfig.board | 9 + .../boards/arm/nice_nano/Kconfig.defconfig | 31 + .../arm/nice_nano/arduino_pro_micro_pins.dtsi | 52 + zmk/app/boards/arm/nice_nano/board.cmake | 5 + zmk/app/boards/arm/nice_nano/nice_nano.dts | 119 + zmk/app/boards/arm/nice_nano/nice_nano.yaml | 15 + .../boards/arm/nice_nano/nice_nano_defconfig | 20 + zmk/app/boards/arm/nrf52840_m2/CMakeLists.txt | 13 + zmk/app/boards/arm/nrf52840_m2/Kconfig | 10 + zmk/app/boards/arm/nrf52840_m2/Kconfig.board | 10 + .../boards/arm/nrf52840_m2/Kconfig.defconfig | 30 + zmk/app/boards/arm/nrf52840_m2/board.cmake | 9 + .../boards/arm/nrf52840_m2/nrf52840_m2.dts | 107 + .../boards/arm/nrf52840_m2/nrf52840_m2.yaml | 15 + .../arm/nrf52840_m2/nrf52840_m2_defconfig | 23 + zmk/app/boards/arm/nrfmicro/CMakeLists.txt | 14 + zmk/app/boards/arm/nrfmicro/Kconfig | 10 + zmk/app/boards/arm/nrfmicro/Kconfig.board | 16 + zmk/app/boards/arm/nrfmicro/Kconfig.defconfig | 43 + .../arm/nrfmicro/arduino_pro_micro_pins.dtsi | 54 + .../arduino_pro_micro_pins_flipped.dtsi | 52 + zmk/app/boards/arm/nrfmicro/board.cmake | 5 + zmk/app/boards/arm/nrfmicro/nrfmicro_11.dts | 107 + zmk/app/boards/arm/nrfmicro/nrfmicro_11.yaml | 15 + .../boards/arm/nrfmicro/nrfmicro_11_defconfig | 22 + .../arm/nrfmicro/nrfmicro_11_flipped.dts | 107 + .../arm/nrfmicro/nrfmicro_11_flipped.yaml | 15 + .../nrfmicro/nrfmicro_11_flipped_defconfig | 22 + zmk/app/boards/arm/nrfmicro/nrfmicro_13.dts | 119 + zmk/app/boards/arm/nrfmicro/nrfmicro_13.yaml | 15 + .../boards/arm/nrfmicro/nrfmicro_13_defconfig | 22 + zmk/app/boards/arm/nrfmicro/pinmux.c | 29 + zmk/app/boards/arm/planck/CMakeLists.txt | 9 + zmk/app/boards/arm/planck/Kconfig.board | 8 + zmk/app/boards/arm/planck/Kconfig.defconfig | 17 + zmk/app/boards/arm/planck/board.cmake | 7 + zmk/app/boards/arm/planck/pinmux.c | 67 + zmk/app/boards/arm/planck/planck_rev6.dts | 65 + zmk/app/boards/arm/planck/planck_rev6.keymap | 22 + zmk/app/boards/arm/planck/planck_rev6.yaml | 19 + .../boards/arm/planck/planck_rev6_defconfig | 28 + zmk/app/boards/arm/proton_c/CMakeLists.txt | 7 + zmk/app/boards/arm/proton_c/Kconfig.board | 8 + zmk/app/boards/arm/proton_c/Kconfig.defconfig | 14 + .../arm/proton_c/arduino_pro_micro_pins.dtsi | 52 + zmk/app/boards/arm/proton_c/board.cmake | 7 + zmk/app/boards/arm/proton_c/pinmux.c | 67 + zmk/app/boards/arm/proton_c/proton_c.dts | 53 + zmk/app/boards/arm/proton_c/proton_c.yaml | 18 + .../boards/arm/proton_c/proton_c_defconfig | 30 + zmk/app/boards/native_posix.conf | 8 + zmk/app/boards/native_posix.overlay | 18 + zmk/app/boards/shields/Kconfig.defconfig | 14 + zmk/app/boards/shields/Kconfig.shield | 5 + .../shields/boardsource3x4/Kconfig.defconfig | 9 + .../shields/boardsource3x4/Kconfig.shield | 6 + .../boardsource3x4/boardsource3x4.conf | 0 .../boardsource3x4/boardsource3x4.keymap | 49 + .../boardsource3x4/boardsource3x4.overlay | 32 + .../clueboard_california/Kconfig.defconfig | 14 + .../clueboard_california/Kconfig.shield | 5 + .../clueboard_california.conf | 0 .../clueboard_california.keymap | 25 + .../clueboard_california.overlay | 34 + .../shields/clueboard_california/readme.md | 24 + .../boards/shields/corne/Kconfig.defconfig | 58 + zmk/app/boards/shields/corne/Kconfig.shield | 8 + .../shields/corne/boards/nice_nano.overlay | 29 + zmk/app/boards/shields/corne/corne.conf | 6 + zmk/app/boards/shields/corne/corne.dtsi | 82 + zmk/app/boards/shields/corne/corne.keymap | 57 + zmk/app/boards/shields/corne/corne_left.conf | 2 + .../boards/shields/corne/corne_left.overlay | 18 + zmk/app/boards/shields/corne/corne_right.conf | 2 + .../boards/shields/corne/corne_right.overlay | 22 + .../boards/shields/cradio/Kconfig.defconfig | 23 + zmk/app/boards/shields/cradio/Kconfig.shield | 8 + zmk/app/boards/shields/cradio/cradio.dtsi | 50 + zmk/app/boards/shields/cradio/cradio.keymap | 43 + .../boards/shields/cradio/cradio_left.conf | 5 + .../boards/shields/cradio/cradio_left.overlay | 7 + .../boards/shields/cradio/cradio_right.conf | 5 + .../shields/cradio/cradio_right.overlay | 11 + zmk/app/boards/shields/iris/Kconfig.defconfig | 16 + zmk/app/boards/shields/iris/Kconfig.shield | 8 + zmk/app/boards/shields/iris/iris.conf | 0 zmk/app/boards/shields/iris/iris.dtsi | 47 + zmk/app/boards/shields/iris/iris.keymap | 63 + zmk/app/boards/shields/iris/iris_left.conf | 2 + zmk/app/boards/shields/iris/iris_left.overlay | 18 + zmk/app/boards/shields/iris/iris_right.conf | 2 + .../boards/shields/iris/iris_right.overlay | 22 + .../boards/shields/kyria/Kconfig.defconfig | 58 + zmk/app/boards/shields/kyria/Kconfig.shield | 8 + .../shields/kyria/boards/nice_nano.overlay | 28 + .../shields/kyria/boards/nrfmicro_11.overlay | 29 + .../kyria/boards/nrfmicro_11_flipped.overlay | 28 + .../shields/kyria/boards/nrfmicro_13.overlay | 28 + zmk/app/boards/shields/kyria/kyria.conf | 10 + zmk/app/boards/shields/kyria/kyria.dtsi | 102 + zmk/app/boards/shields/kyria/kyria.keymap | 30 + zmk/app/boards/shields/kyria/kyria_left.conf | 2 + .../boards/shields/kyria/kyria_left.overlay | 24 + zmk/app/boards/shields/kyria/kyria_right.conf | 2 + .../boards/shields/kyria/kyria_right.overlay | 29 + .../boards/shields/lily58/Kconfig.defconfig | 54 + zmk/app/boards/shields/lily58/Kconfig.shield | 8 + zmk/app/boards/shields/lily58/lily58.conf | 6 + zmk/app/boards/shields/lily58/lily58.dtsi | 80 + zmk/app/boards/shields/lily58/lily58.keymap | 70 + .../boards/shields/lily58/lily58_left.conf | 6 + .../boards/shields/lily58/lily58_left.overlay | 22 + .../boards/shields/lily58/lily58_right.conf | 2 + .../shields/lily58/lily58_right.overlay | 22 + zmk/app/boards/shields/m60/Kconfig.defconfig | 11 + zmk/app/boards/shields/m60/Kconfig.shield | 7 + zmk/app/boards/shields/m60/m60.conf | 0 zmk/app/boards/shields/m60/m60.keymap | 42 + zmk/app/boards/shields/m60/m60.overlay | 60 + zmk/app/boards/shields/m60/readme.md | 14 + .../boards/shields/microdox/Kconfig.defconfig | 60 + .../boards/shields/microdox/Kconfig.shield | 8 + .../shields/microdox/boards/nice_nano.overlay | 34 + zmk/app/boards/shields/microdox/microdox.conf | 6 + zmk/app/boards/shields/microdox/microdox.dtsi | 66 + .../boards/shields/microdox/microdox.keymap | 73 + .../shields/microdox/microdox_left.conf | 2 + .../shields/microdox/microdox_left.overlay | 17 + .../shields/microdox/microdox_right.conf | 2 + .../shields/microdox/microdox_right.overlay | 21 + .../boards/shields/nibble/Kconfig.defconfig | 13 + zmk/app/boards/shields/nibble/Kconfig.shield | 5 + zmk/app/boards/shields/nibble/nibble.conf | 0 zmk/app/boards/shields/nibble/nibble.keymap | 37 + zmk/app/boards/shields/nibble/nibble.overlay | 49 + zmk/app/boards/shields/qaz/Kconfig.defconfig | 9 + zmk/app/boards/shields/qaz/Kconfig.shield | 5 + zmk/app/boards/shields/qaz/qaz.conf | 0 zmk/app/boards/shields/qaz/qaz.keymap | 58 + zmk/app/boards/shields/qaz/qaz.overlay | 53 + .../shields/quefrency/Kconfig.defconfig | 17 + .../boards/shields/quefrency/Kconfig.shield | 8 + .../boards/shields/quefrency/quefrency.conf | 0 .../boards/shields/quefrency/quefrency.dtsi | 32 + .../boards/shields/quefrency/quefrency.keymap | 51 + .../shields/quefrency/quefrency_left.conf | 2 + .../shields/quefrency/quefrency_left.overlay | 37 + .../shields/quefrency/quefrency_right.conf | 2 + .../shields/quefrency/quefrency_right.overlay | 45 + .../shields/reviung41/Kconfig.defconfig | 9 + .../boards/shields/reviung41/Kconfig.shield | 5 + .../reviung41/boards/nice_nano.overlay | 28 + .../boards/shields/reviung41/reviung41.conf | 3 + .../boards/shields/reviung41/reviung41.keymap | 72 + .../shields/reviung41/reviung41.overlay | 52 + .../boards/shields/romac/Kconfig.defconfig | 10 + zmk/app/boards/shields/romac/Kconfig.shield | 5 + zmk/app/boards/shields/romac/romac.conf | 0 zmk/app/boards/shields/romac/romac.keymap | 47 + zmk/app/boards/shields/romac/romac.overlay | 34 + .../shields/romac_plus/Kconfig.defconfig | 9 + .../boards/shields/romac_plus/Kconfig.shield | 5 + .../romac_plus/boards/nice_nano.overlay | 28 + .../boards/shields/romac_plus/romac_plus.conf | 6 + .../boards/shields/romac_plus/romac_plus.dtsi | 56 + .../shields/romac_plus/romac_plus.keymap | 49 + .../shields/romac_plus/romac_plus.overlay | 31 + .../shields/settings_reset/Kconfig.defconfig | 10 + .../shields/settings_reset/Kconfig.shield | 5 + .../settings_reset/settings_reset.conf | 1 + .../settings_reset/settings_reset.keymap | 22 + .../settings_reset/settings_reset.overlay | 24 + .../boards/shields/sofle/Kconfig.defconfig | 54 + zmk/app/boards/shields/sofle/Kconfig.shield | 8 + zmk/app/boards/shields/sofle/sofle.conf | 9 + zmk/app/boards/shields/sofle/sofle.dtsi | 89 + zmk/app/boards/shields/sofle/sofle.keymap | 70 + zmk/app/boards/shields/sofle/sofle_left.conf | 5 + .../boards/shields/sofle/sofle_left.overlay | 22 + zmk/app/boards/shields/sofle/sofle_right.conf | 5 + .../boards/shields/sofle/sofle_right.overlay | 26 + .../shields/splitreus62/Kconfig.defconfig | 22 + .../boards/shields/splitreus62/Kconfig.shield | 8 + .../shields/splitreus62/splitreus62.conf | 0 .../shields/splitreus62/splitreus62.dtsi | 50 + .../shields/splitreus62/splitreus62.keymap | 32 + .../shields/splitreus62/splitreus62_left.conf | 2 + .../splitreus62/splitreus62_left.overlay | 18 + .../splitreus62/splitreus62_right.conf | 2 + .../splitreus62/splitreus62_right.overlay | 22 + zmk/app/boards/shields/tg4x/Kconfig.defconfig | 9 + zmk/app/boards/shields/tg4x/Kconfig.shield | 5 + zmk/app/boards/shields/tg4x/tg4x.keymap | 58 + zmk/app/boards/shields/tg4x/tg4x.overlay | 56 + zmk/app/cmake/zmk_config.cmake | 149 + zmk/app/drivers/zephyr/CMakeLists.txt | 14 + zmk/app/drivers/zephyr/Kconfig | 76 + .../drivers/zephyr/battery_voltage_divider.c | 217 + .../zephyr/dts/bindings/alps,ec11.yaml | 21 + .../bindings/zmk,battery-voltage-divider.yaml | 14 + .../dts/bindings/zmk,kscan-gpio-demux.yaml | 22 + .../dts/bindings/zmk,kscan-gpio-direct.yaml | 16 + .../dts/bindings/zmk,kscan-gpio-matrix.yaml | 25 + zmk/app/drivers/zephyr/ec11.c | 148 + zmk/app/drivers/zephyr/ec11.h | 58 + zmk/app/drivers/zephyr/ec11_trigger.c | 148 + zmk/app/drivers/zephyr/kscan_gpio_demux.c | 254 + zmk/app/drivers/zephyr/kscan_gpio_direct.c | 230 + zmk/app/drivers/zephyr/kscan_gpio_matrix.c | 294 + zmk/app/drivers/zephyr/module.yaml | 3 + zmk/app/dts/behaviors.dtsi | 13 + zmk/app/dts/behaviors/bluetooth.dtsi | 9 + zmk/app/dts/behaviors/ext_power.dtsi | 9 + zmk/app/dts/behaviors/key_press.dtsi | 11 + zmk/app/dts/behaviors/layer_tap.dtsi | 12 + zmk/app/dts/behaviors/mod_tap.dtsi | 12 + zmk/app/dts/behaviors/momentary_layer.dtsi | 9 + zmk/app/dts/behaviors/none.dtsi | 15 + zmk/app/dts/behaviors/outputs.dtsi | 9 + zmk/app/dts/behaviors/reset.dtsi | 18 + zmk/app/dts/behaviors/rgb_underglow.dtsi | 9 + .../behaviors/sensor_rotate_key_press.dtsi | 11 + zmk/app/dts/behaviors/toggle_layer.dtsi | 15 + zmk/app/dts/behaviors/transparent.dtsi | 9 + zmk/app/dts/bindings/behaviors/one_param.yaml | 14 + zmk/app/dts/bindings/behaviors/two_param.yaml | 15 + .../dts/bindings/behaviors/zero_param.yaml | 11 + .../behaviors/zmk,behavior-bluetooth.yaml | 8 + .../behaviors/zmk,behavior-ext-power.yaml | 10 + .../behaviors/zmk,behavior-hold-tap.yaml | 23 + .../behaviors/zmk,behavior-key-press.yaml | 8 + .../zmk,behavior-momentary-layer.yaml | 8 + .../bindings/behaviors/zmk,behavior-none.yaml | 8 + .../behaviors/zmk,behavior-outputs.yaml | 10 + .../behaviors/zmk,behavior-reset.yaml | 13 + .../behaviors/zmk,behavior-rgb-underglow.yaml | 8 + .../zmk,behavior-sensor-rotate-key-press.yaml | 19 + .../behaviors/zmk,behavior-toggle-layer.yaml | 8 + .../behaviors/zmk,behavior-transparent.yaml | 8 + .../dts/bindings/zmk,ext-power-generic.yaml | 20 + zmk/app/dts/bindings/zmk,keymap-sensors.yaml | 14 + zmk/app/dts/bindings/zmk,keymap.yaml | 15 + zmk/app/dts/bindings/zmk,kscan-composite.yaml | 27 + zmk/app/dts/bindings/zmk,kscan-mock.yaml | 19 + .../dts/bindings/zmk,matrix-transform.yaml | 18 + .../dts/common/arduino_uno_pro_micro_map.dtsi | 49 + zmk/app/include/drivers/behavior.h | 114 + zmk/app/include/drivers/ext_power.h | 104 + zmk/app/include/dt-bindings/zmk/bt.h | 21 + zmk/app/include/dt-bindings/zmk/ext_power.h | 13 + zmk/app/include/dt-bindings/zmk/hid_usage.h | 2566 ++ .../include/dt-bindings/zmk/hid_usage_pages.h | 51 + zmk/app/include/dt-bindings/zmk/keys.h | 1420 + zmk/app/include/dt-bindings/zmk/kscan-mock.h | 14 + .../dt-bindings/zmk/matrix-transform.h | 10 + zmk/app/include/dt-bindings/zmk/modifiers.h | 28 + zmk/app/include/dt-bindings/zmk/outputs.h | 9 + zmk/app/include/dt-bindings/zmk/reset.h | 13 + zmk/app/include/dt-bindings/zmk/rgb.h | 17 + zmk/app/include/linker/zmk-events.ld | 16 + zmk/app/include/zmk/behavior.h | 19 + zmk/app/include/zmk/ble.h | 26 + zmk/app/include/zmk/ble/profile.h | 16 + zmk/app/include/zmk/display.h | 10 + zmk/app/include/zmk/endpoints.h | 20 + zmk/app/include/zmk/event-manager.h | 81 + .../zmk/events/ble-active-profile-changed.h | 21 + .../zmk/events/keycode-state-changed.h | 41 + .../zmk/events/modifiers-state-changed.h | 28 + .../zmk/events/position-state-changed.h | 19 + zmk/app/include/zmk/events/sensor-event.h | 19 + .../zmk/events/usb-conn-state-changed.h | 20 + zmk/app/include/zmk/handlers.h | 12 + zmk/app/include/zmk/hid.h | 182 + zmk/app/include/zmk/hog.h | 15 + zmk/app/include/zmk/keymap.h | 14 + zmk/app/include/zmk/keys.h | 22 + zmk/app/include/zmk/kscan.h | 9 + zmk/app/include/zmk/matrix.h | 36 + zmk/app/include/zmk/matrix_transform.h | 9 + zmk/app/include/zmk/rgb_underglow.h | 14 + zmk/app/include/zmk/sensors.h | 12 + zmk/app/include/zmk/split/bluetooth/service.h | 10 + zmk/app/include/zmk/split/bluetooth/uuid.h | 17 + zmk/app/include/zmk/usb.h | 29 + zmk/app/prj.conf | 0 zmk/app/run-test.sh | 41 + zmk/app/src/battery.c | 75 + zmk/app/src/behaviors/behavior_bt.c | 51 + zmk/app/src/behaviors/behavior_ext_power.c | 57 + zmk/app/src/behaviors/behavior_hold_tap.c | 522 + zmk/app/src/behaviors/behavior_key_press.c | 43 + .../src/behaviors/behavior_momentary_layer.c | 44 + zmk/app/src/behaviors/behavior_none.c | 44 + zmk/app/src/behaviors/behavior_outputs.c | 44 + zmk/app/src/behaviors/behavior_reset.c | 47 + .../src/behaviors/behavior_rgb_underglow.c | 57 + .../behavior_sensor_rotate_key_press.c | 65 + zmk/app/src/behaviors/behavior_toggle_layer.c | 46 + zmk/app/src/behaviors/behavior_transparent.c | 44 + zmk/app/src/ble.c | 596 + zmk/app/src/display.c | 54 + zmk/app/src/endpoints.c | 242 + zmk/app/src/event_manager.c | 89 + .../src/events/ble_active_profile_changed.c | 10 + zmk/app/src/events/keycode_state_changed.c | 10 + zmk/app/src/events/modifiers_state_changed.c | 10 + zmk/app/src/events/position_state_changed.c | 10 + zmk/app/src/events/sensor_event.c | 10 + zmk/app/src/events/usb_conn_state_changed.c | 10 + zmk/app/src/ext_power_generic.c | 91 + zmk/app/src/hid.c | 116 + zmk/app/src/hid_listener.c | 86 + zmk/app/src/hog.c | 183 + zmk/app/src/keymap.c | 214 + zmk/app/src/kscan.c | 73 + zmk/app/src/kscan_composite.c | 113 + zmk/app/src/kscan_mock.c | 95 + zmk/app/src/main.c | 44 + zmk/app/src/matrix_transform.c | 40 + zmk/app/src/power.c | 62 + zmk/app/src/rgb_underglow.c | 381 + zmk/app/src/sensors.c | 84 + zmk/app/src/settings.c | 8 + zmk/app/src/split/bluetooth/central.c | 323 + zmk/app/src/split/bluetooth/service.c | 56 + zmk/app/src/split_listener.c | 36 + zmk/app/src/usb.c | 112 + zmk/app/tests/hold-tap/README.md | 1 + .../hold-tap/balanced/1-dn-up/events.patterns | 4 + .../balanced/1-dn-up/keycode_events.snapshot | 5 + .../balanced/1-dn-up/native_posix.keymap | 11 + .../balanced/2-dn-timer-up/events.patterns | 4 + .../2-dn-timer-up/keycode_events.snapshot | 5 + .../2-dn-timer-up/native_posix.keymap | 11 + .../3a-moddn-dn-modup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3a-moddn-dn-modup-up/native_posix.keymap | 13 + .../events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../3c-kcdn-dn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 + .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 13 + .../4a-dn-htdn-timer-htup-up/events.patterns | 4 + .../keycode_events.snapshot | 10 + .../native_posix.keymap | 14 + .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4c-dn-kcdn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 + .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../hold-tap/balanced/behavior_keymap.dtsi | 27 + .../balanced/many-nested/events.patterns | 4 + .../many-nested/keycode_events.snapshot | 20 + .../balanced/many-nested/native_posix.keymap | 41 + .../hold-preferred/1-dn-up/events.patterns | 4 + .../1-dn-up/keycode_events.snapshot | 5 + .../1-dn-up/native_posix.keymap | 11 + .../2-dn-timer-up/events.patterns | 4 + .../2-dn-timer-up/keycode_events.snapshot | 5 + .../2-dn-timer-up/native_posix.keymap | 11 + .../3a-moddn-dn-modup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3a-moddn-dn-modup-up/native_posix.keymap | 13 + .../events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../3c-kcdn-dn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 + .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 13 + .../4a-dn-htdn-timer-htup-up/events.patterns | 4 + .../keycode_events.snapshot | 10 + .../native_posix.keymap | 14 + .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4c-dn-kcdn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 + .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../hold-preferred/behavior_keymap.dtsi | 29 + .../tap-preferred/1-dn-up/events.patterns | 4 + .../1-dn-up/keycode_events.snapshot | 5 + .../tap-preferred/1-dn-up/native_posix.keymap | 11 + .../2-dn-timer-up/events.patterns | 4 + .../2-dn-timer-up/keycode_events.snapshot | 5 + .../2-dn-timer-up/native_posix.keymap | 11 + .../3a-moddn-dn-modup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3a-moddn-dn-modup-up/native_posix.keymap | 13 + .../events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../3c-kcdn-dn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../3c-kcdn-dn-kcup-up/native_posix.keymap | 13 + .../3d-kcdn-dn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 13 + .../4a-dn-htdn-timer-htup-up/events.patterns | 4 + .../keycode_events.snapshot | 10 + .../native_posix.keymap | 14 + .../4a-dn-kcdn-timer-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4b-dn-kcdn-kcup-timer-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../4c-dn-kcdn-kcup-up/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../4c-dn-kcdn-kcup-up/native_posix.keymap | 14 + .../4d-dn-kcdn-timer-up-kcup/events.patterns | 4 + .../keycode_events.snapshot | 7 + .../native_posix.keymap | 14 + .../tap-preferred/behavior_keymap.dtsi | 27 + .../tests/hold-tap/zmk-modtap-proposal.odg | Bin 0 -> 23148 bytes .../tests/hold-tap/zmk-modtap-proposal.pdf | Bin 0 -> 25493 bytes zmk/app/tests/keypress/behavior_keymap.dtsi | 16 + .../keypress/cp-press-release/events.patterns | 1 + .../cp-press-release/keycode_events.snapshot | 2 + .../cp-press-release/native_posix.keymap | 5 + .../keypress/kp-press-release/events.patterns | 1 + .../kp-press-release/keycode_events.snapshot | 2 + .../kp-press-release/native_posix.keymap | 5 + .../events.patterns | 4 + .../keycode_events.snapshot | 17 + .../native_posix.keymap | 27 + .../kp-lctl-dn-lctl-up/events.patterns | 4 + .../keycode_events.snapshot | 9 + .../kp-lctl-dn-lctl-up/native_posix.keymap | 25 + .../events.patterns | 4 + .../keycode_events.snapshot | 18 + .../native_posix.keymap | 27 + .../events.patterns | 4 + .../keycode_events.snapshot | 18 + .../native_posix.keymap | 28 + .../events.patterns | 4 + .../keycode_events.snapshot | 8 + .../native_posix.keymap | 27 + .../pending | 9 + .../events.patterns | 4 + .../keycode_events.snapshot | 8 + .../native_posix.keymap | 27 + .../events.patterns | 4 + .../keycode_events.snapshot | 13 + .../native_posix.keymap | 27 + .../events.patterns | 4 + .../keycode_events.snapshot | 13 + .../native_posix.keymap | 27 + .../momentary-layer/behavior_keymap.dtsi | 28 + .../early-key-release/events.patterns | 2 + .../early-key-release/keycode_events.snapshot | 4 + .../early-key-release/native_posix.keymap | 8 + .../momentary-layer/normal/events.patterns | 2 + .../normal/keycode_events.snapshot | 4 + .../normal/native_posix.keymap | 8 + zmk/app/tests/none/behavior_keymap.dtsi | 22 + zmk/app/tests/none/layered/events.patterns | 1 + .../none/layered/keycode_events.snapshot | 0 .../tests/none/layered/native_posix.keymap | 8 + zmk/app/tests/none/normal/events.patterns | 1 + .../tests/none/normal/keycode_events.snapshot | 0 zmk/app/tests/none/normal/native_posix.keymap | 8 + .../tests/toggle-layer/behavior_keymap.dtsi | 28 + .../early-key-release/events.patterns | 2 + .../early-key-release/keycode_events.snapshot | 6 + .../early-key-release/native_posix.keymap | 9 + .../tests/toggle-layer/normal/events.patterns | 2 + .../normal/keycode_events.snapshot | 4 + .../toggle-layer/normal/native_posix.keymap | 8 + .../tests/transparent/behavior_keymap.dtsi | 22 + .../tests/transparent/layered/events.patterns | 1 + .../layered/keycode_events.snapshot | 2 + .../transparent/layered/native_posix.keymap | 8 + .../tests/transparent/normal/events.patterns | 1 + .../normal/keycode_events.snapshot | 0 .../transparent/normal/native_posix.keymap | 8 + zmk/app/west.yml | 40 + zmk/docs/.eslintignore | 2 + zmk/docs/.eslintrc.js | 29 + zmk/docs/.gitignore | 20 + zmk/docs/.nvmrc | 1 + zmk/docs/.prettierignore | 3 + zmk/docs/.prettierrc.js | 3 + zmk/docs/README.md | 29 + zmk/docs/blog/2020-05-24-wip.md | 13 + zmk/docs/blog/2020-08-12-zmk-sotf-1.md | 52 + zmk/docs/blog/2020-09-21-zmk-sotf-2.md | 106 + zmk/docs/blog/2020-10-03-bootloader-fix.md | 195 + zmk/docs/blog/2020-11-09-zmk-sotf-3.md | 156 + .../assets/dev-setup/vscode_devcontainer.png | Bin 0 -> 20773 bytes zmk/docs/docs/assets/env-var/env_var.png | Bin 0 -> 17317 bytes zmk/docs/docs/assets/env-var/gnuarmemb.png | Bin 0 -> 7914 bytes zmk/docs/docs/assets/env-var/new_variable.png | Bin 0 -> 60899 bytes zmk/docs/docs/assets/env-var/start_menu.png | Bin 0 -> 51108 bytes .../docs/assets/env-var/zephyr_toolchain.png | Bin 0 -> 7282 bytes .../assets/features/keymaps/layer-diagram.png | Bin 0 -> 53975 bytes zmk/docs/docs/assets/hold-tap/case1_2.png | Bin 0 -> 10323 bytes .../assets/hold-tap/case_hold_preferred.png | Bin 0 -> 6380 bytes zmk/docs/docs/assets/hold-tap/comparison.png | Bin 0 -> 158912 bytes .../pro-micro/pro-micro-pins-labelled.jpg | Bin 0 -> 115573 bytes .../troubleshooting/filetransfer/linux.png | Bin 0 -> 40111 bytes .../troubleshooting/filetransfer/mac.png | Bin 0 -> 26499 bytes .../troubleshooting/filetransfer/windows.png | Bin 0 -> 12077 bytes .../troubleshooting/keymaps/errorscreen.png | Bin 0 -> 186351 bytes .../troubleshooting/keymaps/healthyEDIT.png | Bin 0 -> 188078 bytes .../troubleshooting/keymaps/unhealthyEDIT.png | Bin 0 -> 187729 bytes zmk/docs/docs/assets/usb-logging/com.jpg | Bin 0 -> 10993 bytes zmk/docs/docs/assets/usb-logging/putty.jpg | Bin 0 -> 160650 bytes .../assets/user-setup/firmware-archive.png | Bin 0 -> 13312 bytes .../assets/user-setup/github-actions-link.png | Bin 0 -> 10573 bytes zmk/docs/docs/behavior/bluetooth.md | 76 + zmk/docs/docs/behavior/hold-tap.md | 69 + zmk/docs/docs/behavior/key-press.md | 59 + zmk/docs/docs/behavior/layers.md | 110 + zmk/docs/docs/behavior/lighting.md | 51 + zmk/docs/docs/behavior/misc.md | 42 + zmk/docs/docs/behavior/mod-tap.md | 42 + zmk/docs/docs/behavior/outputs.md | 59 + zmk/docs/docs/behavior/power.md | 64 + zmk/docs/docs/behavior/reset.md | 43 + zmk/docs/docs/codes/_applications.mdx | 9 + zmk/docs/docs/codes/_editing.mdx | 9 + zmk/docs/docs/codes/_footnotes/example.mdx | 13 + zmk/docs/docs/codes/_input-assist.mdx | 5 + zmk/docs/docs/codes/_keyboard-keypad.mdx | 61 + zmk/docs/docs/codes/_media.mdx | 21 + zmk/docs/docs/codes/_power.mdx | 5 + zmk/docs/docs/codes/applications.mdx | 15 + zmk/docs/docs/codes/editing.mdx | 15 + zmk/docs/docs/codes/index.mdx | 33 + zmk/docs/docs/codes/input-assist.mdx | 15 + zmk/docs/docs/codes/keyboard-keypad.mdx | 15 + zmk/docs/docs/codes/media.mdx | 15 + zmk/docs/docs/codes/modifiers.mdx | 46 + zmk/docs/docs/codes/power.mdx | 15 + zmk/docs/docs/customization.md | 58 + zmk/docs/docs/dev-boards-shields-keymaps.md | 52 + zmk/docs/docs/dev-build-flash.md | 111 + zmk/docs/docs/dev-clean-room.md | 28 + zmk/docs/docs/dev-guide-new-shield.md | 537 + zmk/docs/docs/dev-guide-usb-logging.md | 103 + zmk/docs/docs/dev-posix-board.md | 38 + zmk/docs/docs/dev-setup.md | 554 + zmk/docs/docs/dev-tests.md | 20 + zmk/docs/docs/faq.md | 109 + zmk/docs/docs/feature/displays.md | 6 + zmk/docs/docs/feature/encoders.md | 44 + zmk/docs/docs/feature/keymaps.md | 182 + zmk/docs/docs/feature/underglow.md | 131 + zmk/docs/docs/hardware.md | 48 + zmk/docs/docs/intro.md | 48 + zmk/docs/docs/troubleshooting.md | 90 + zmk/docs/docs/user-setup.md | 200 + zmk/docs/docusaurus.config.js | 123 + zmk/docs/netlify.toml | 4 + zmk/docs/package-lock.json | 31438 ++++++++++++++++ zmk/docs/package.json | 47 + zmk/docs/sidebars.js | 49 + zmk/docs/src/components/codes/Context.jsx | 17 + zmk/docs/src/components/codes/Description.jsx | 51 + zmk/docs/src/components/codes/Footnote.jsx | 23 + zmk/docs/src/components/codes/FootnoteRef.jsx | 22 + .../src/components/codes/FootnoteRefs.jsx | 43 + zmk/docs/src/components/codes/Footnotes.jsx | 30 + zmk/docs/src/components/codes/LinkIcon.jsx | 14 + zmk/docs/src/components/codes/Name.jsx | 25 + zmk/docs/src/components/codes/OsLegend.jsx | 23 + zmk/docs/src/components/codes/OsSupport.jsx | 26 + .../src/components/codes/OsSupportIcon.jsx | 51 + zmk/docs/src/components/codes/Table.jsx | 80 + zmk/docs/src/components/codes/TableRow.jsx | 70 + .../src/components/codes/ToastyContainer.jsx | 22 + .../codes/ToastyCopyToClipboard.jsx | 30 + zmk/docs/src/css/codes.css | 220 + zmk/docs/src/css/custom.css | 43 + zmk/docs/src/data/footnotes.js | 11 + zmk/docs/src/data/groups.js | 414 + zmk/docs/src/data/hid-applications.js | 11 + zmk/docs/src/data/hid-usage-pages.js | 9 + zmk/docs/src/data/hid.js | 7839 ++++ zmk/docs/src/data/operating-systems.js | 38 + zmk/docs/src/footnotes.js | 14 + zmk/docs/src/groups.js | 11 + zmk/docs/src/hid-usage.js | 9 + zmk/docs/src/hid.js | 20 + zmk/docs/src/pages/index.js | 98 + zmk/docs/src/pages/styles.module.css | 51 + zmk/docs/static/img/favicon.ico | Bin 0 -> 15086 bytes zmk/docs/static/img/undraw_open_source.svg | 1 + zmk/docs/static/img/undraw_wireless.svg | 1 + zmk/docs/static/img/undraw_zephyr.svg | 1 + zmk/docs/static/img/zmk_logo.svg | 17 + zmk/docs/static/setup.ps1 | 206 + zmk/docs/static/setup.sh | 222 + 655 files changed, 65100 insertions(+) create mode 100644 zmk/.clang-format create mode 100644 zmk/.devcontainer/.bashrc create mode 100644 zmk/.devcontainer/Dockerfile create mode 100644 zmk/.devcontainer/devcontainer.json create mode 100644 zmk/.gitattributes create mode 100644 zmk/.github/workflows/build.yml create mode 100644 zmk/.github/workflows/clang-format-lint.yml create mode 100644 zmk/.github/workflows/doc-checks.yml create mode 100644 zmk/.github/workflows/test.yml create mode 100644 zmk/.gitignore create mode 100644 zmk/.vscode/settings.json create mode 100644 zmk/.vscode/tasks.json create mode 100644 zmk/AUTHORS create mode 100644 zmk/CODE_OF_CONDUCT.md create mode 100644 zmk/CONTRIBUTING.md create mode 100644 zmk/LICENSE create mode 100644 zmk/README.md create mode 100644 zmk/app/.gitignore create mode 100644 zmk/app/CMakeLists.txt create mode 100644 zmk/app/Kconfig create mode 100644 zmk/app/boards/Kconfig create mode 100644 zmk/app/boards/arm/bluemicro840/CMakeLists.txt create mode 100644 zmk/app/boards/arm/bluemicro840/Kconfig create mode 100644 zmk/app/boards/arm/bluemicro840/Kconfig.board create mode 100644 zmk/app/boards/arm/bluemicro840/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi create mode 100644 zmk/app/boards/arm/bluemicro840/bluemicro840_v1.dts create mode 100644 zmk/app/boards/arm/bluemicro840/bluemicro840_v1.yaml create mode 100644 zmk/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig create mode 100644 zmk/app/boards/arm/bluemicro840/board.cmake create mode 100644 zmk/app/boards/arm/dz60rgb/CMakeLists.txt create mode 100644 zmk/app/boards/arm/dz60rgb/Kconfig.board create mode 100644 zmk/app/boards/arm/dz60rgb/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/dz60rgb/board.cmake create mode 100644 zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.dts create mode 100644 zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap create mode 100644 zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.yaml create mode 100644 zmk/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig create mode 100644 zmk/app/boards/arm/dz60rgb/pinmux.c create mode 100644 zmk/app/boards/arm/nice_nano/CMakeLists.txt create mode 100644 zmk/app/boards/arm/nice_nano/Kconfig create mode 100644 zmk/app/boards/arm/nice_nano/Kconfig.board create mode 100644 zmk/app/boards/arm/nice_nano/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi create mode 100644 zmk/app/boards/arm/nice_nano/board.cmake create mode 100644 zmk/app/boards/arm/nice_nano/nice_nano.dts create mode 100644 zmk/app/boards/arm/nice_nano/nice_nano.yaml create mode 100644 zmk/app/boards/arm/nice_nano/nice_nano_defconfig create mode 100644 zmk/app/boards/arm/nrf52840_m2/CMakeLists.txt create mode 100644 zmk/app/boards/arm/nrf52840_m2/Kconfig create mode 100644 zmk/app/boards/arm/nrf52840_m2/Kconfig.board create mode 100644 zmk/app/boards/arm/nrf52840_m2/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/nrf52840_m2/board.cmake create mode 100644 zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.dts create mode 100644 zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.yaml create mode 100644 zmk/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig create mode 100644 zmk/app/boards/arm/nrfmicro/CMakeLists.txt create mode 100644 zmk/app/boards/arm/nrfmicro/Kconfig create mode 100644 zmk/app/boards/arm/nrfmicro/Kconfig.board create mode 100644 zmk/app/boards/arm/nrfmicro/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi create mode 100644 zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi create mode 100644 zmk/app/boards/arm/nrfmicro/board.cmake create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11.dts create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11.yaml create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11_defconfig create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_13.dts create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_13.yaml create mode 100644 zmk/app/boards/arm/nrfmicro/nrfmicro_13_defconfig create mode 100644 zmk/app/boards/arm/nrfmicro/pinmux.c create mode 100644 zmk/app/boards/arm/planck/CMakeLists.txt create mode 100644 zmk/app/boards/arm/planck/Kconfig.board create mode 100644 zmk/app/boards/arm/planck/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/planck/board.cmake create mode 100644 zmk/app/boards/arm/planck/pinmux.c create mode 100644 zmk/app/boards/arm/planck/planck_rev6.dts create mode 100644 zmk/app/boards/arm/planck/planck_rev6.keymap create mode 100644 zmk/app/boards/arm/planck/planck_rev6.yaml create mode 100644 zmk/app/boards/arm/planck/planck_rev6_defconfig create mode 100644 zmk/app/boards/arm/proton_c/CMakeLists.txt create mode 100644 zmk/app/boards/arm/proton_c/Kconfig.board create mode 100644 zmk/app/boards/arm/proton_c/Kconfig.defconfig create mode 100644 zmk/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi create mode 100644 zmk/app/boards/arm/proton_c/board.cmake create mode 100644 zmk/app/boards/arm/proton_c/pinmux.c create mode 100644 zmk/app/boards/arm/proton_c/proton_c.dts create mode 100644 zmk/app/boards/arm/proton_c/proton_c.yaml create mode 100644 zmk/app/boards/arm/proton_c/proton_c_defconfig create mode 100644 zmk/app/boards/native_posix.conf create mode 100644 zmk/app/boards/native_posix.overlay create mode 100644 zmk/app/boards/shields/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/Kconfig.shield create mode 100644 zmk/app/boards/shields/boardsource3x4/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/boardsource3x4/Kconfig.shield create mode 100644 zmk/app/boards/shields/boardsource3x4/boardsource3x4.conf create mode 100644 zmk/app/boards/shields/boardsource3x4/boardsource3x4.keymap create mode 100644 zmk/app/boards/shields/boardsource3x4/boardsource3x4.overlay create mode 100644 zmk/app/boards/shields/clueboard_california/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/clueboard_california/Kconfig.shield create mode 100644 zmk/app/boards/shields/clueboard_california/clueboard_california.conf create mode 100644 zmk/app/boards/shields/clueboard_california/clueboard_california.keymap create mode 100644 zmk/app/boards/shields/clueboard_california/clueboard_california.overlay create mode 100644 zmk/app/boards/shields/clueboard_california/readme.md create mode 100644 zmk/app/boards/shields/corne/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/corne/Kconfig.shield create mode 100644 zmk/app/boards/shields/corne/boards/nice_nano.overlay create mode 100644 zmk/app/boards/shields/corne/corne.conf create mode 100644 zmk/app/boards/shields/corne/corne.dtsi create mode 100644 zmk/app/boards/shields/corne/corne.keymap create mode 100644 zmk/app/boards/shields/corne/corne_left.conf create mode 100644 zmk/app/boards/shields/corne/corne_left.overlay create mode 100644 zmk/app/boards/shields/corne/corne_right.conf create mode 100644 zmk/app/boards/shields/corne/corne_right.overlay create mode 100644 zmk/app/boards/shields/cradio/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/cradio/Kconfig.shield create mode 100644 zmk/app/boards/shields/cradio/cradio.dtsi create mode 100644 zmk/app/boards/shields/cradio/cradio.keymap create mode 100644 zmk/app/boards/shields/cradio/cradio_left.conf create mode 100644 zmk/app/boards/shields/cradio/cradio_left.overlay create mode 100644 zmk/app/boards/shields/cradio/cradio_right.conf create mode 100644 zmk/app/boards/shields/cradio/cradio_right.overlay create mode 100644 zmk/app/boards/shields/iris/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/iris/Kconfig.shield create mode 100644 zmk/app/boards/shields/iris/iris.conf create mode 100644 zmk/app/boards/shields/iris/iris.dtsi create mode 100644 zmk/app/boards/shields/iris/iris.keymap create mode 100644 zmk/app/boards/shields/iris/iris_left.conf create mode 100644 zmk/app/boards/shields/iris/iris_left.overlay create mode 100644 zmk/app/boards/shields/iris/iris_right.conf create mode 100644 zmk/app/boards/shields/iris/iris_right.overlay create mode 100644 zmk/app/boards/shields/kyria/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/kyria/Kconfig.shield create mode 100644 zmk/app/boards/shields/kyria/boards/nice_nano.overlay create mode 100644 zmk/app/boards/shields/kyria/boards/nrfmicro_11.overlay create mode 100644 zmk/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay create mode 100644 zmk/app/boards/shields/kyria/boards/nrfmicro_13.overlay create mode 100644 zmk/app/boards/shields/kyria/kyria.conf create mode 100644 zmk/app/boards/shields/kyria/kyria.dtsi create mode 100644 zmk/app/boards/shields/kyria/kyria.keymap create mode 100644 zmk/app/boards/shields/kyria/kyria_left.conf create mode 100644 zmk/app/boards/shields/kyria/kyria_left.overlay create mode 100644 zmk/app/boards/shields/kyria/kyria_right.conf create mode 100644 zmk/app/boards/shields/kyria/kyria_right.overlay create mode 100644 zmk/app/boards/shields/lily58/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/lily58/Kconfig.shield create mode 100644 zmk/app/boards/shields/lily58/lily58.conf create mode 100644 zmk/app/boards/shields/lily58/lily58.dtsi create mode 100644 zmk/app/boards/shields/lily58/lily58.keymap create mode 100644 zmk/app/boards/shields/lily58/lily58_left.conf create mode 100644 zmk/app/boards/shields/lily58/lily58_left.overlay create mode 100644 zmk/app/boards/shields/lily58/lily58_right.conf create mode 100644 zmk/app/boards/shields/lily58/lily58_right.overlay create mode 100644 zmk/app/boards/shields/m60/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/m60/Kconfig.shield create mode 100644 zmk/app/boards/shields/m60/m60.conf create mode 100644 zmk/app/boards/shields/m60/m60.keymap create mode 100644 zmk/app/boards/shields/m60/m60.overlay create mode 100644 zmk/app/boards/shields/m60/readme.md create mode 100644 zmk/app/boards/shields/microdox/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/microdox/Kconfig.shield create mode 100644 zmk/app/boards/shields/microdox/boards/nice_nano.overlay create mode 100644 zmk/app/boards/shields/microdox/microdox.conf create mode 100644 zmk/app/boards/shields/microdox/microdox.dtsi create mode 100644 zmk/app/boards/shields/microdox/microdox.keymap create mode 100644 zmk/app/boards/shields/microdox/microdox_left.conf create mode 100644 zmk/app/boards/shields/microdox/microdox_left.overlay create mode 100644 zmk/app/boards/shields/microdox/microdox_right.conf create mode 100644 zmk/app/boards/shields/microdox/microdox_right.overlay create mode 100644 zmk/app/boards/shields/nibble/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/nibble/Kconfig.shield create mode 100644 zmk/app/boards/shields/nibble/nibble.conf create mode 100644 zmk/app/boards/shields/nibble/nibble.keymap create mode 100644 zmk/app/boards/shields/nibble/nibble.overlay create mode 100644 zmk/app/boards/shields/qaz/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/qaz/Kconfig.shield create mode 100644 zmk/app/boards/shields/qaz/qaz.conf create mode 100644 zmk/app/boards/shields/qaz/qaz.keymap create mode 100644 zmk/app/boards/shields/qaz/qaz.overlay create mode 100644 zmk/app/boards/shields/quefrency/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/quefrency/Kconfig.shield create mode 100644 zmk/app/boards/shields/quefrency/quefrency.conf create mode 100644 zmk/app/boards/shields/quefrency/quefrency.dtsi create mode 100644 zmk/app/boards/shields/quefrency/quefrency.keymap create mode 100644 zmk/app/boards/shields/quefrency/quefrency_left.conf create mode 100644 zmk/app/boards/shields/quefrency/quefrency_left.overlay create mode 100644 zmk/app/boards/shields/quefrency/quefrency_right.conf create mode 100644 zmk/app/boards/shields/quefrency/quefrency_right.overlay create mode 100644 zmk/app/boards/shields/reviung41/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/reviung41/Kconfig.shield create mode 100644 zmk/app/boards/shields/reviung41/boards/nice_nano.overlay create mode 100644 zmk/app/boards/shields/reviung41/reviung41.conf create mode 100644 zmk/app/boards/shields/reviung41/reviung41.keymap create mode 100644 zmk/app/boards/shields/reviung41/reviung41.overlay create mode 100644 zmk/app/boards/shields/romac/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/romac/Kconfig.shield create mode 100644 zmk/app/boards/shields/romac/romac.conf create mode 100644 zmk/app/boards/shields/romac/romac.keymap create mode 100644 zmk/app/boards/shields/romac/romac.overlay create mode 100644 zmk/app/boards/shields/romac_plus/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/romac_plus/Kconfig.shield create mode 100644 zmk/app/boards/shields/romac_plus/boards/nice_nano.overlay create mode 100644 zmk/app/boards/shields/romac_plus/romac_plus.conf create mode 100644 zmk/app/boards/shields/romac_plus/romac_plus.dtsi create mode 100644 zmk/app/boards/shields/romac_plus/romac_plus.keymap create mode 100644 zmk/app/boards/shields/romac_plus/romac_plus.overlay create mode 100644 zmk/app/boards/shields/settings_reset/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/settings_reset/Kconfig.shield create mode 100644 zmk/app/boards/shields/settings_reset/settings_reset.conf create mode 100644 zmk/app/boards/shields/settings_reset/settings_reset.keymap create mode 100644 zmk/app/boards/shields/settings_reset/settings_reset.overlay create mode 100644 zmk/app/boards/shields/sofle/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/sofle/Kconfig.shield create mode 100644 zmk/app/boards/shields/sofle/sofle.conf create mode 100644 zmk/app/boards/shields/sofle/sofle.dtsi create mode 100644 zmk/app/boards/shields/sofle/sofle.keymap create mode 100644 zmk/app/boards/shields/sofle/sofle_left.conf create mode 100644 zmk/app/boards/shields/sofle/sofle_left.overlay create mode 100644 zmk/app/boards/shields/sofle/sofle_right.conf create mode 100644 zmk/app/boards/shields/sofle/sofle_right.overlay create mode 100644 zmk/app/boards/shields/splitreus62/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/splitreus62/Kconfig.shield create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62.conf create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62.dtsi create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62.keymap create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62_left.conf create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62_left.overlay create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62_right.conf create mode 100644 zmk/app/boards/shields/splitreus62/splitreus62_right.overlay create mode 100644 zmk/app/boards/shields/tg4x/Kconfig.defconfig create mode 100644 zmk/app/boards/shields/tg4x/Kconfig.shield create mode 100644 zmk/app/boards/shields/tg4x/tg4x.keymap create mode 100644 zmk/app/boards/shields/tg4x/tg4x.overlay create mode 100644 zmk/app/cmake/zmk_config.cmake create mode 100644 zmk/app/drivers/zephyr/CMakeLists.txt create mode 100644 zmk/app/drivers/zephyr/Kconfig create mode 100644 zmk/app/drivers/zephyr/battery_voltage_divider.c create mode 100644 zmk/app/drivers/zephyr/dts/bindings/alps,ec11.yaml create mode 100644 zmk/app/drivers/zephyr/dts/bindings/zmk,battery-voltage-divider.yaml create mode 100644 zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-demux.yaml create mode 100644 zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-direct.yaml create mode 100644 zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml create mode 100644 zmk/app/drivers/zephyr/ec11.c create mode 100644 zmk/app/drivers/zephyr/ec11.h create mode 100644 zmk/app/drivers/zephyr/ec11_trigger.c create mode 100644 zmk/app/drivers/zephyr/kscan_gpio_demux.c create mode 100644 zmk/app/drivers/zephyr/kscan_gpio_direct.c create mode 100644 zmk/app/drivers/zephyr/kscan_gpio_matrix.c create mode 100644 zmk/app/drivers/zephyr/module.yaml create mode 100644 zmk/app/dts/behaviors.dtsi create mode 100644 zmk/app/dts/behaviors/bluetooth.dtsi create mode 100644 zmk/app/dts/behaviors/ext_power.dtsi create mode 100644 zmk/app/dts/behaviors/key_press.dtsi create mode 100644 zmk/app/dts/behaviors/layer_tap.dtsi create mode 100644 zmk/app/dts/behaviors/mod_tap.dtsi create mode 100644 zmk/app/dts/behaviors/momentary_layer.dtsi create mode 100644 zmk/app/dts/behaviors/none.dtsi create mode 100644 zmk/app/dts/behaviors/outputs.dtsi create mode 100644 zmk/app/dts/behaviors/reset.dtsi create mode 100644 zmk/app/dts/behaviors/rgb_underglow.dtsi create mode 100644 zmk/app/dts/behaviors/sensor_rotate_key_press.dtsi create mode 100644 zmk/app/dts/behaviors/toggle_layer.dtsi create mode 100644 zmk/app/dts/behaviors/transparent.dtsi create mode 100644 zmk/app/dts/bindings/behaviors/one_param.yaml create mode 100644 zmk/app/dts/bindings/behaviors/two_param.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zero_param.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-bluetooth.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-ext-power.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-key-press.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-momentary-layer.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-none.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-outputs.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-reset.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-rgb-underglow.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml create mode 100644 zmk/app/dts/bindings/behaviors/zmk,behavior-transparent.yaml create mode 100644 zmk/app/dts/bindings/zmk,ext-power-generic.yaml create mode 100644 zmk/app/dts/bindings/zmk,keymap-sensors.yaml create mode 100644 zmk/app/dts/bindings/zmk,keymap.yaml create mode 100644 zmk/app/dts/bindings/zmk,kscan-composite.yaml create mode 100644 zmk/app/dts/bindings/zmk,kscan-mock.yaml create mode 100644 zmk/app/dts/bindings/zmk,matrix-transform.yaml create mode 100644 zmk/app/dts/common/arduino_uno_pro_micro_map.dtsi create mode 100644 zmk/app/include/drivers/behavior.h create mode 100644 zmk/app/include/drivers/ext_power.h create mode 100644 zmk/app/include/dt-bindings/zmk/bt.h create mode 100644 zmk/app/include/dt-bindings/zmk/ext_power.h create mode 100644 zmk/app/include/dt-bindings/zmk/hid_usage.h create mode 100644 zmk/app/include/dt-bindings/zmk/hid_usage_pages.h create mode 100644 zmk/app/include/dt-bindings/zmk/keys.h create mode 100644 zmk/app/include/dt-bindings/zmk/kscan-mock.h create mode 100644 zmk/app/include/dt-bindings/zmk/matrix-transform.h create mode 100644 zmk/app/include/dt-bindings/zmk/modifiers.h create mode 100644 zmk/app/include/dt-bindings/zmk/outputs.h create mode 100644 zmk/app/include/dt-bindings/zmk/reset.h create mode 100644 zmk/app/include/dt-bindings/zmk/rgb.h create mode 100644 zmk/app/include/linker/zmk-events.ld create mode 100644 zmk/app/include/zmk/behavior.h create mode 100644 zmk/app/include/zmk/ble.h create mode 100644 zmk/app/include/zmk/ble/profile.h create mode 100644 zmk/app/include/zmk/display.h create mode 100644 zmk/app/include/zmk/endpoints.h create mode 100644 zmk/app/include/zmk/event-manager.h create mode 100644 zmk/app/include/zmk/events/ble-active-profile-changed.h create mode 100644 zmk/app/include/zmk/events/keycode-state-changed.h create mode 100644 zmk/app/include/zmk/events/modifiers-state-changed.h create mode 100644 zmk/app/include/zmk/events/position-state-changed.h create mode 100644 zmk/app/include/zmk/events/sensor-event.h create mode 100644 zmk/app/include/zmk/events/usb-conn-state-changed.h create mode 100644 zmk/app/include/zmk/handlers.h create mode 100644 zmk/app/include/zmk/hid.h create mode 100644 zmk/app/include/zmk/hog.h create mode 100644 zmk/app/include/zmk/keymap.h create mode 100644 zmk/app/include/zmk/keys.h create mode 100644 zmk/app/include/zmk/kscan.h create mode 100644 zmk/app/include/zmk/matrix.h create mode 100644 zmk/app/include/zmk/matrix_transform.h create mode 100644 zmk/app/include/zmk/rgb_underglow.h create mode 100644 zmk/app/include/zmk/sensors.h create mode 100644 zmk/app/include/zmk/split/bluetooth/service.h create mode 100644 zmk/app/include/zmk/split/bluetooth/uuid.h create mode 100644 zmk/app/include/zmk/usb.h create mode 100644 zmk/app/prj.conf create mode 100644 zmk/app/run-test.sh create mode 100644 zmk/app/src/battery.c create mode 100644 zmk/app/src/behaviors/behavior_bt.c create mode 100644 zmk/app/src/behaviors/behavior_ext_power.c create mode 100644 zmk/app/src/behaviors/behavior_hold_tap.c create mode 100644 zmk/app/src/behaviors/behavior_key_press.c create mode 100644 zmk/app/src/behaviors/behavior_momentary_layer.c create mode 100644 zmk/app/src/behaviors/behavior_none.c create mode 100644 zmk/app/src/behaviors/behavior_outputs.c create mode 100644 zmk/app/src/behaviors/behavior_reset.c create mode 100644 zmk/app/src/behaviors/behavior_rgb_underglow.c create mode 100644 zmk/app/src/behaviors/behavior_sensor_rotate_key_press.c create mode 100644 zmk/app/src/behaviors/behavior_toggle_layer.c create mode 100644 zmk/app/src/behaviors/behavior_transparent.c create mode 100644 zmk/app/src/ble.c create mode 100644 zmk/app/src/display.c create mode 100644 zmk/app/src/endpoints.c create mode 100644 zmk/app/src/event_manager.c create mode 100644 zmk/app/src/events/ble_active_profile_changed.c create mode 100644 zmk/app/src/events/keycode_state_changed.c create mode 100644 zmk/app/src/events/modifiers_state_changed.c create mode 100644 zmk/app/src/events/position_state_changed.c create mode 100644 zmk/app/src/events/sensor_event.c create mode 100644 zmk/app/src/events/usb_conn_state_changed.c create mode 100644 zmk/app/src/ext_power_generic.c create mode 100644 zmk/app/src/hid.c create mode 100644 zmk/app/src/hid_listener.c create mode 100644 zmk/app/src/hog.c create mode 100644 zmk/app/src/keymap.c create mode 100644 zmk/app/src/kscan.c create mode 100644 zmk/app/src/kscan_composite.c create mode 100644 zmk/app/src/kscan_mock.c create mode 100644 zmk/app/src/main.c create mode 100644 zmk/app/src/matrix_transform.c create mode 100644 zmk/app/src/power.c create mode 100644 zmk/app/src/rgb_underglow.c create mode 100644 zmk/app/src/sensors.c create mode 100644 zmk/app/src/settings.c create mode 100644 zmk/app/src/split/bluetooth/central.c create mode 100644 zmk/app/src/split/bluetooth/service.c create mode 100644 zmk/app/src/split_listener.c create mode 100644 zmk/app/src/usb.c create mode 100644 zmk/app/tests/hold-tap/README.md create mode 100644 zmk/app/tests/hold-tap/balanced/1-dn-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/balanced/behavior_keymap.dtsi create mode 100644 zmk/app/tests/hold-tap/balanced/many-nested/events.patterns create mode 100644 zmk/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/balanced/many-nested/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi create mode 100644 zmk/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot create mode 100644 zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap create mode 100644 zmk/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi create mode 100644 zmk/app/tests/hold-tap/zmk-modtap-proposal.odg create mode 100644 zmk/app/tests/hold-tap/zmk-modtap-proposal.pdf create mode 100644 zmk/app/tests/keypress/behavior_keymap.dtsi create mode 100644 zmk/app/tests/keypress/cp-press-release/events.patterns create mode 100644 zmk/app/tests/keypress/cp-press-release/keycode_events.snapshot create mode 100644 zmk/app/tests/keypress/cp-press-release/native_posix.keymap create mode 100644 zmk/app/tests/keypress/kp-press-release/events.patterns create mode 100644 zmk/app/tests/keypress/kp-press-release/keycode_events.snapshot create mode 100644 zmk/app/tests/keypress/kp-press-release/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/events.patterns create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/events.patterns create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/events.patterns create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/events.patterns create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/events.patterns create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/events.patterns create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/events.patterns create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/events.patterns create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot create mode 100644 zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap create mode 100644 zmk/app/tests/momentary-layer/behavior_keymap.dtsi create mode 100644 zmk/app/tests/momentary-layer/early-key-release/events.patterns create mode 100644 zmk/app/tests/momentary-layer/early-key-release/keycode_events.snapshot create mode 100644 zmk/app/tests/momentary-layer/early-key-release/native_posix.keymap create mode 100644 zmk/app/tests/momentary-layer/normal/events.patterns create mode 100644 zmk/app/tests/momentary-layer/normal/keycode_events.snapshot create mode 100644 zmk/app/tests/momentary-layer/normal/native_posix.keymap create mode 100644 zmk/app/tests/none/behavior_keymap.dtsi create mode 100644 zmk/app/tests/none/layered/events.patterns create mode 100644 zmk/app/tests/none/layered/keycode_events.snapshot create mode 100644 zmk/app/tests/none/layered/native_posix.keymap create mode 100644 zmk/app/tests/none/normal/events.patterns create mode 100644 zmk/app/tests/none/normal/keycode_events.snapshot create mode 100644 zmk/app/tests/none/normal/native_posix.keymap create mode 100644 zmk/app/tests/toggle-layer/behavior_keymap.dtsi create mode 100644 zmk/app/tests/toggle-layer/early-key-release/events.patterns create mode 100644 zmk/app/tests/toggle-layer/early-key-release/keycode_events.snapshot create mode 100644 zmk/app/tests/toggle-layer/early-key-release/native_posix.keymap create mode 100644 zmk/app/tests/toggle-layer/normal/events.patterns create mode 100644 zmk/app/tests/toggle-layer/normal/keycode_events.snapshot create mode 100644 zmk/app/tests/toggle-layer/normal/native_posix.keymap create mode 100644 zmk/app/tests/transparent/behavior_keymap.dtsi create mode 100644 zmk/app/tests/transparent/layered/events.patterns create mode 100644 zmk/app/tests/transparent/layered/keycode_events.snapshot create mode 100644 zmk/app/tests/transparent/layered/native_posix.keymap create mode 100644 zmk/app/tests/transparent/normal/events.patterns create mode 100644 zmk/app/tests/transparent/normal/keycode_events.snapshot create mode 100644 zmk/app/tests/transparent/normal/native_posix.keymap create mode 100644 zmk/app/west.yml create mode 100644 zmk/docs/.eslintignore create mode 100644 zmk/docs/.eslintrc.js create mode 100644 zmk/docs/.gitignore create mode 100644 zmk/docs/.nvmrc create mode 100644 zmk/docs/.prettierignore create mode 100644 zmk/docs/.prettierrc.js create mode 100644 zmk/docs/README.md create mode 100644 zmk/docs/blog/2020-05-24-wip.md create mode 100644 zmk/docs/blog/2020-08-12-zmk-sotf-1.md create mode 100644 zmk/docs/blog/2020-09-21-zmk-sotf-2.md create mode 100644 zmk/docs/blog/2020-10-03-bootloader-fix.md create mode 100644 zmk/docs/blog/2020-11-09-zmk-sotf-3.md create mode 100644 zmk/docs/docs/assets/dev-setup/vscode_devcontainer.png create mode 100644 zmk/docs/docs/assets/env-var/env_var.png create mode 100644 zmk/docs/docs/assets/env-var/gnuarmemb.png create mode 100644 zmk/docs/docs/assets/env-var/new_variable.png create mode 100644 zmk/docs/docs/assets/env-var/start_menu.png create mode 100644 zmk/docs/docs/assets/env-var/zephyr_toolchain.png create mode 100644 zmk/docs/docs/assets/features/keymaps/layer-diagram.png create mode 100644 zmk/docs/docs/assets/hold-tap/case1_2.png create mode 100644 zmk/docs/docs/assets/hold-tap/case_hold_preferred.png create mode 100644 zmk/docs/docs/assets/hold-tap/comparison.png create mode 100644 zmk/docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg create mode 100644 zmk/docs/docs/assets/troubleshooting/filetransfer/linux.png create mode 100644 zmk/docs/docs/assets/troubleshooting/filetransfer/mac.png create mode 100644 zmk/docs/docs/assets/troubleshooting/filetransfer/windows.png create mode 100644 zmk/docs/docs/assets/troubleshooting/keymaps/errorscreen.png create mode 100644 zmk/docs/docs/assets/troubleshooting/keymaps/healthyEDIT.png create mode 100644 zmk/docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png create mode 100644 zmk/docs/docs/assets/usb-logging/com.jpg create mode 100644 zmk/docs/docs/assets/usb-logging/putty.jpg create mode 100644 zmk/docs/docs/assets/user-setup/firmware-archive.png create mode 100644 zmk/docs/docs/assets/user-setup/github-actions-link.png create mode 100644 zmk/docs/docs/behavior/bluetooth.md create mode 100644 zmk/docs/docs/behavior/hold-tap.md create mode 100644 zmk/docs/docs/behavior/key-press.md create mode 100644 zmk/docs/docs/behavior/layers.md create mode 100644 zmk/docs/docs/behavior/lighting.md create mode 100644 zmk/docs/docs/behavior/misc.md create mode 100644 zmk/docs/docs/behavior/mod-tap.md create mode 100644 zmk/docs/docs/behavior/outputs.md create mode 100644 zmk/docs/docs/behavior/power.md create mode 100644 zmk/docs/docs/behavior/reset.md create mode 100644 zmk/docs/docs/codes/_applications.mdx create mode 100644 zmk/docs/docs/codes/_editing.mdx create mode 100644 zmk/docs/docs/codes/_footnotes/example.mdx create mode 100644 zmk/docs/docs/codes/_input-assist.mdx create mode 100644 zmk/docs/docs/codes/_keyboard-keypad.mdx create mode 100644 zmk/docs/docs/codes/_media.mdx create mode 100644 zmk/docs/docs/codes/_power.mdx create mode 100644 zmk/docs/docs/codes/applications.mdx create mode 100644 zmk/docs/docs/codes/editing.mdx create mode 100644 zmk/docs/docs/codes/index.mdx create mode 100644 zmk/docs/docs/codes/input-assist.mdx create mode 100644 zmk/docs/docs/codes/keyboard-keypad.mdx create mode 100644 zmk/docs/docs/codes/media.mdx create mode 100644 zmk/docs/docs/codes/modifiers.mdx create mode 100644 zmk/docs/docs/codes/power.mdx create mode 100644 zmk/docs/docs/customization.md create mode 100644 zmk/docs/docs/dev-boards-shields-keymaps.md create mode 100644 zmk/docs/docs/dev-build-flash.md create mode 100644 zmk/docs/docs/dev-clean-room.md create mode 100644 zmk/docs/docs/dev-guide-new-shield.md create mode 100644 zmk/docs/docs/dev-guide-usb-logging.md create mode 100644 zmk/docs/docs/dev-posix-board.md create mode 100644 zmk/docs/docs/dev-setup.md create mode 100644 zmk/docs/docs/dev-tests.md create mode 100644 zmk/docs/docs/faq.md create mode 100644 zmk/docs/docs/feature/displays.md create mode 100644 zmk/docs/docs/feature/encoders.md create mode 100644 zmk/docs/docs/feature/keymaps.md create mode 100644 zmk/docs/docs/feature/underglow.md create mode 100644 zmk/docs/docs/hardware.md create mode 100644 zmk/docs/docs/intro.md create mode 100644 zmk/docs/docs/troubleshooting.md create mode 100644 zmk/docs/docs/user-setup.md create mode 100644 zmk/docs/docusaurus.config.js create mode 100644 zmk/docs/netlify.toml create mode 100644 zmk/docs/package-lock.json create mode 100644 zmk/docs/package.json create mode 100644 zmk/docs/sidebars.js create mode 100644 zmk/docs/src/components/codes/Context.jsx create mode 100644 zmk/docs/src/components/codes/Description.jsx create mode 100644 zmk/docs/src/components/codes/Footnote.jsx create mode 100644 zmk/docs/src/components/codes/FootnoteRef.jsx create mode 100644 zmk/docs/src/components/codes/FootnoteRefs.jsx create mode 100644 zmk/docs/src/components/codes/Footnotes.jsx create mode 100644 zmk/docs/src/components/codes/LinkIcon.jsx create mode 100644 zmk/docs/src/components/codes/Name.jsx create mode 100644 zmk/docs/src/components/codes/OsLegend.jsx create mode 100644 zmk/docs/src/components/codes/OsSupport.jsx create mode 100644 zmk/docs/src/components/codes/OsSupportIcon.jsx create mode 100644 zmk/docs/src/components/codes/Table.jsx create mode 100644 zmk/docs/src/components/codes/TableRow.jsx create mode 100644 zmk/docs/src/components/codes/ToastyContainer.jsx create mode 100644 zmk/docs/src/components/codes/ToastyCopyToClipboard.jsx create mode 100644 zmk/docs/src/css/codes.css create mode 100644 zmk/docs/src/css/custom.css create mode 100644 zmk/docs/src/data/footnotes.js create mode 100644 zmk/docs/src/data/groups.js create mode 100644 zmk/docs/src/data/hid-applications.js create mode 100644 zmk/docs/src/data/hid-usage-pages.js create mode 100644 zmk/docs/src/data/hid.js create mode 100644 zmk/docs/src/data/operating-systems.js create mode 100644 zmk/docs/src/footnotes.js create mode 100644 zmk/docs/src/groups.js create mode 100644 zmk/docs/src/hid-usage.js create mode 100644 zmk/docs/src/hid.js create mode 100644 zmk/docs/src/pages/index.js create mode 100644 zmk/docs/src/pages/styles.module.css create mode 100644 zmk/docs/static/img/favicon.ico create mode 100644 zmk/docs/static/img/undraw_open_source.svg create mode 100644 zmk/docs/static/img/undraw_wireless.svg create mode 100644 zmk/docs/static/img/undraw_zephyr.svg create mode 100644 zmk/docs/static/img/zmk_logo.svg create mode 100644 zmk/docs/static/setup.ps1 create mode 100644 zmk/docs/static/setup.sh diff --git a/zmk/.clang-format b/zmk/.clang-format new file mode 100644 index 00000000..3c29522a --- /dev/null +++ b/zmk/.clang-format @@ -0,0 +1,4 @@ +BasedOnStyle: LLVM +IndentWidth: 4 +ColumnLimit: 100 +SortIncludes: false diff --git a/zmk/.devcontainer/.bashrc b/zmk/.devcontainer/.bashrc new file mode 100644 index 00000000..9fdb8f69 --- /dev/null +++ b/zmk/.devcontainer/.bashrc @@ -0,0 +1,8 @@ +export LS_OPTIONS='-F --color=auto' +alias ls='ls $LS_OPTIONS' +if [ "${CODESPACES}" = "true" ]; then + export WORKSPACE_DIR="$HOME/workspace/zmk" +fi +if [ -f "$WORKSPACE_DIR/zephyr/zephyr-env.sh" ]; then + source "$WORKSPACE_DIR/zephyr/zephyr-env.sh" +fi diff --git a/zmk/.devcontainer/Dockerfile b/zmk/.devcontainer/Dockerfile new file mode 100644 index 00000000..184aae9a --- /dev/null +++ b/zmk/.devcontainer/Dockerfile @@ -0,0 +1,11 @@ +FROM zmkfirmware/zephyr-west-action-arm + +RUN apt-get -y update && \ + apt-get -y upgrade && \ + apt-get install --no-install-recommends -y \ + ssh \ + gpg && \ + rm -rf /var/lib/apt/lists/* + +COPY .bashrc tmp +RUN mv /tmp/.bashrc ~/.bashrc diff --git a/zmk/.devcontainer/devcontainer.json b/zmk/.devcontainer/devcontainer.json new file mode 100644 index 00000000..14feeff4 --- /dev/null +++ b/zmk/.devcontainer/devcontainer.json @@ -0,0 +1,11 @@ +{ + "name": "ZMK Development", + "dockerFile": "Dockerfile", + "extensions": ["ms-vscode.cpptools"], + "runArgs": ["--security-opt", "label=disable"], + "containerEnv": {"WORKSPACE_DIR": "${containerWorkspaceFolder}"}, + "settings": { + "terminal.integrated.shell.linux": "/bin/bash" + }, +} + diff --git a/zmk/.gitattributes b/zmk/.gitattributes new file mode 100644 index 00000000..3d05d86d --- /dev/null +++ b/zmk/.gitattributes @@ -0,0 +1,6 @@ +* text=auto + +# Always use Unix-style line endings for Bash scripts so they work in +# Docker on Windows. +.bashrc text eol=lf +*.sh text eol=lf diff --git a/zmk/.github/workflows/build.yml b/zmk/.github/workflows/build.yml new file mode 100644 index 00000000..e6be31ac --- /dev/null +++ b/zmk/.github/workflows/build.yml @@ -0,0 +1,90 @@ +on: + push: + paths: + - "app/**" + pull_request: + paths: + - "app/**" + +name: Build + +jobs: + build: + runs-on: ubuntu-latest + name: Build Test + strategy: + matrix: + board: [proton_c, nice_nano, bluemicro840_v1, nrfmicro_13] + shield: + - boardsource3x4 + - corne_left + - corne_right + - kyria_left + - kyria_right + - lily58_left + - lily58_right + - iris_left + - iris_right + - reviung41 + - romac + - romac_plus + - settings_reset + - quefrency_left + - quefrency_right + - nibble + include: + - board: proton_c + shield: clueboard_california + steps: + # To use this repository's private action, + # you must check out the repository + - name: Checkout + uses: actions/checkout@v2 + - name: Cache west modules + timeout-minutes: 2 + continue-on-error: true + uses: actions/cache@v2 + env: + cache-name: cache-zephyr-modules + with: + path: | + modules/ + tools/ + zephyr/ + bootloader/ + key: 2-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + restore-keys: | + 2-${{ runner.os }}-build-${{ env.cache-name }}- + 2-${{ runner.os }}-build- + 2-${{ runner.os }}- + - name: West Init + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-init + with: + args: 'init "-l app"' + - name: West Update + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-update + with: + args: "update" + - name: West Config Zephyr Base + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-config + with: + args: 'config "--global zephyr.base-prefer configfile"' + - name: West Zephyr Export + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-zephyr-export + with: + args: "zephyr-export" + - name: West Build + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-build + with: + args: 'build "-s app -b ${{ matrix.board }} -- -DSHIELD=${{ matrix.shield }}"' + - name: Archive Build + uses: actions/upload-artifact@v2 + if: ${{ matrix.board != 'proton_c' }} + with: + name: "${{ matrix.board }}-${{ matrix.shield }}-zmk-uf2" + path: build/zephyr/zmk.uf2 diff --git a/zmk/.github/workflows/clang-format-lint.yml b/zmk/.github/workflows/clang-format-lint.yml new file mode 100644 index 00000000..70ae9863 --- /dev/null +++ b/zmk/.github/workflows/clang-format-lint.yml @@ -0,0 +1,29 @@ +name: clang-format-lint + +on: + push: + paths: + - "app/boards/**/*.c" + - "app/include/**/*.h" + - "app/src/**" + - "app/drivers/**/*.c" + - "app/drivers/**/*.h" + pull_request: + paths: + - "app/boards/**/*.c" + - "app/include/**/*.h" + - "app/src/**" + - "app/drivers/**/*.c" + - "app/drivers/**/*.h" + +jobs: + build: + runs-on: ubuntu-latest + name: clang-format lint + + steps: + - uses: actions/checkout@v2 + - uses: DoozyX/clang-format-lint-action@v0.9 + with: + source: "./app" + extensions: "h,c" diff --git a/zmk/.github/workflows/doc-checks.yml b/zmk/.github/workflows/doc-checks.yml new file mode 100644 index 00000000..a31a88e6 --- /dev/null +++ b/zmk/.github/workflows/doc-checks.yml @@ -0,0 +1,35 @@ +name: doc-checks + +on: + push: + paths: + - "docs/**" + pull_request: + paths: + - "docs/**" + +jobs: + lint: + runs-on: ubuntu-latest + name: ESLint + + steps: + - uses: actions/checkout@v2 + - uses: bahmutov/npm-install@v1 + with: + working-directory: docs + - name: ESLint + run: npm run lint + working-directory: docs + prettier: + runs-on: ubuntu-latest + name: Prettier + + steps: + - uses: actions/checkout@v2 + - uses: bahmutov/npm-install@v1 + with: + working-directory: docs + - name: Prettier Check + run: npm run prettier:check + working-directory: docs diff --git a/zmk/.github/workflows/test.yml b/zmk/.github/workflows/test.yml new file mode 100644 index 00000000..a6af058c --- /dev/null +++ b/zmk/.github/workflows/test.yml @@ -0,0 +1,70 @@ +on: + push: + paths: + - "app/tests/**" + - "app/src/**" + pull_request: + paths: + - "app/tests/**" + - "app/src/**" + +name: Test + +jobs: + integration_test: + runs-on: ubuntu-latest + name: Integration Tests + steps: + # To use this repository's private action, + # you must check out the repository + - name: Checkout + uses: actions/checkout@v2 + - name: Cache west modules + timeout-minutes: 2 + continue-on-error: true + uses: actions/cache@v2 + env: + cache-name: cache-zephyr-modules + with: + path: | + modules/ + tools/ + zephyr/ + bootloader/ + key: 2-${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('app/west.yml') }} + restore-keys: | + 2-${{ runner.os }}-build-${{ env.cache-name }}- + 2-${{ runner.os }}-build- + 2-${{ runner.os }}- + - name: West Init + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-init + with: + args: 'init "-l app"' + - name: West Update + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-update + with: + args: "update" + - name: West Config Zephyr Base + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-config + with: + args: 'config "--global zephyr.base-prefer configfile"' + - name: West Zephyr Export + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-zephyr-export + with: + args: "zephyr-export" + - name: Test All + uses: "docker://zmkfirmware/zephyr-west-action-arm:latest" + id: west-build + with: + entrypoint: /bin/bash + args: '-c "cd app && ./run-test.sh all"' + - name: Archive Build + if: ${{ always() }} + uses: actions/upload-artifact@v2 + with: + name: "log-files" + path: app/build/**/*.log diff --git a/zmk/.gitignore b/zmk/.gitignore new file mode 100644 index 00000000..8a06510d --- /dev/null +++ b/zmk/.gitignore @@ -0,0 +1,8 @@ +/.west +/bootloader +/modules +/tools +/zephyr +/zmk-config +/build +*.DS_Store diff --git a/zmk/.vscode/settings.json b/zmk/.vscode/settings.json new file mode 100644 index 00000000..eba95704 --- /dev/null +++ b/zmk/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "*.overlay": "dts", + "*.keymap": "dts" + } +} \ No newline at end of file diff --git a/zmk/.vscode/tasks.json b/zmk/.vscode/tasks.json new file mode 100644 index 00000000..080ffea6 --- /dev/null +++ b/zmk/.vscode/tasks.json @@ -0,0 +1,28 @@ +{ + // See https://go.microsoft.com/fwlink/?LinkId=733558 + // for the documentation about the tasks.json format + "version": "2.0.0", + "tasks": [ + { + "label": "Build", + "type": "shell", + "command": "cd app && west build", + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "label": "Flash", + "type": "shell", + "command": "cd app && west flash", + "group": "test" + }, + { + "label": "Debug", + "type": "shell", + "command": "cd app && west debug", + "group": "test" + } + ] +} diff --git a/zmk/AUTHORS b/zmk/AUTHORS new file mode 100644 index 00000000..8052fd95 --- /dev/null +++ b/zmk/AUTHORS @@ -0,0 +1,11 @@ +# The ZMK Project consists of many contributors. This file includes individuals +# who have contributed significant changes to the project. To be added to here, +# please submit a PR to the project repo. +Peter Johanson (@petejohanson) +Innovaker (@innovaker) +Nick Winans (@Nicell) +Okke Formsma (@okke-formsma) +Cody McGinnis (@BrainWart) +Kurtis Lew (@kurtis-lew) +Richard Jones (@bmcgavin) +Kevin Chen (@chenkevinh) \ No newline at end of file diff --git a/zmk/CODE_OF_CONDUCT.md b/zmk/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..399c0b12 --- /dev/null +++ b/zmk/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +- Demonstrating empathy and kindness toward other people +- Being respectful of differing opinions, viewpoints, and experiences +- Giving and gracefully accepting constructive feedback +- Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +- Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +- The use of sexualized language or imagery, and sexual attention or + advances of any kind +- Trolling, insulting or derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or email + address, without their explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +conduct@zmkfirmware.dev. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/zmk/CONTRIBUTING.md b/zmk/CONTRIBUTING.md new file mode 100644 index 00000000..3ea8c783 --- /dev/null +++ b/zmk/CONTRIBUTING.md @@ -0,0 +1,120 @@ +# Contributing To ZMK + +Thanks for taking an interest in contributing to ZMK! After reading through the documentation, if +you have any questions, please come join us on the +[ZMK Discord Server][discord-invite]. + +## Code of Conduct + +All community members are expected to abide by the [Code of Conduct][code-of-conduct]. +For any and all conduct inquiries or concerns, please contact conduct@zmkfirmware.dev. + +[code-of-conduct]: https://github.com/zmkfirmware/zmk/blob/main/CODE_OF_CONDUCT.md + +## How Can I Contribute + +There are many different ways that you can contribute to ZMK, several of which require no coding +abilities. These include: + +- Chat Support +- Issue Reporting/Commenting +- Testing +- Documentation +- Code Contributions + +## Chat Support + +Providing user support on the [ZMK Discord Server][discord-invite] is a great way to help the +project. In particular, answering questions in the [#help](https://discord.com/channels/719497620560543766/719909884769992755) channel is incredibly appreciated. + +## Issue Reporting/Commenting + +Often, you might encounter unexpected behavior when building, flashing, or running the ZMK +firmware. Submitting or commenting on issues on GitHub is a great way to contribute to the +ZMK project. + +### Before Submitting a Report + +- Review the [Frequently Asked Questions](https://zmkfirmware.dev/docs/faq). +- Check the [Troubleshooting Guide](https://zmkfirmware.dev/docs/troubleshooting) for answers. +- Search the [open issues](https://github.com/zmkfirmware/zmk/issues) for an existing report that + matches your problem. + +### Opening A Report + +To open a report: + +- Head to https://github.com/zmkfirmware/zmk/issues/new +- Provide an accurate summary of the issue in the title. +- Provide as much detail as you can about the issue including: + - What [board/shield](https://zmkfirmware.dev/docs/faq#what-is-a-board) you are using. + - A link to the user repository, if you used it to build your firmware. + - Exact steps to reproduce the problem. + - Any relevant screenshots or [logs](https://zmkfirmware.dev/docs/dev-guide-usb-logging) + +## Testing + +The `help wanted` label will be added to any [pull requests](https://github.com/zmkfirmware/zmk/pulls?q=is%3Aopen+is%3Apr+label%3A%22help+wanted%22) +or [issues](https://github.com/zmkfirmware/zmk/issues?q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22) +where user testing can assist the ZMK contributors to verify fixes, confirm +bugs, etc. + +When providing testing feedback, please provide: + +- Exact steps used to test +- Any hardware details relevant to testing +- Pass/fail summary for testing. +- Full details of any failures, including: + - Logs + - Screenshots + +## Documentation + +Quality documentation is a huge part of what makes a successful project. Contributions to add +documentation to areas not currently covered are greatly appreciated. + +### Contributing + +- The documentation site can be found in the main ZMK repo, in the + [docs/](https://github.com/zmkfirmware/zmk/tree/main/docs) subdirectory. +- The documentation is maintained using [Docusaurus V2](https://v2.docusaurus.io/docs/). +- To get started, from the `docs/` directory, run `npm ci` and then `npm start`. +- Enhancements should be submitted as pull requests to the `main` branch of ZMK. + +## Code Contributions + +### Development Setup + +To get your development environment setup going, start at the +[basic setup](https://zmkfirmware.dev/docs/dev-setup) docs, and make sure you can build and flash +your own locally built firmware. + +### Formatting + +ZMK uses `clang-format` to ensure consist formatting for our source code. Before submitting your +changes, make sure you've manually run `clang-format`, or have your IDE configured to auto-format +on save. + +### Commit Messages + +The ZMK project is working towards, but not yet enforcing, the use of +[conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) for commit messages. + +Further documentation and details will be provided here soon. + +### Pull Requests + +When opening a pull request with your changes, please: + +- Submit the PR to the `main` branch of the + [`zmkfirmware/zmk`](https://github.com/zmkfirmware/zmk) repository. +- Use a descriptive title that summarizes the change. +- In the description, include: + - References to any open issues fixed by the PR. + - Feature added by the PR + - Bugs fixed by the PR. + - Testing you've performed locally. + - Requested testing by reviewers or testers. + - Screenshots or logs that support understanding the change. + +[discord-invite]: https://zmkfirmware.dev/community/discord/invite diff --git a/zmk/LICENSE b/zmk/LICENSE new file mode 100644 index 00000000..213e7340 --- /dev/null +++ b/zmk/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 The ZMK Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/zmk/README.md b/zmk/README.md new file mode 100644 index 00000000..cde1ffae --- /dev/null +++ b/zmk/README.md @@ -0,0 +1,14 @@ +# Zephyr™ Mechanical Keyboard (ZMK) Firmware + +[![Discord](https://img.shields.io/discord/719497620560543766)](https://zmkfirmware.dev/community/discord/invite) +[![Build](https://github.com/zmkfirmware/zmk/workflows/Build/badge.svg)](https://github.com/zmkfirmware/zmk/actions) +[![Contributor Covenant](https://img.shields.io/badge/Contributor%20Covenant-v2.0%20adopted-ff69b4.svg)](CODE_OF_CONDUCT.md) + +This project is a complete work in progress, with only basic things functioning. The goal is to explore a new MK firmware +with a less restrictive license and better BLE support, built on top of the [Zephyr™ Project](https://www.zephyrproject.org/) + +Check out the website to learn more: https://zmkfirmware.dev/ + +You can also come join our [ZMK Discord Server](https://zmkfirmware.dev/community/discord/invite) + +To review planned features, check out the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature. diff --git a/zmk/app/.gitignore b/zmk/app/.gitignore new file mode 100644 index 00000000..567609b1 --- /dev/null +++ b/zmk/app/.gitignore @@ -0,0 +1 @@ +build/ diff --git a/zmk/app/CMakeLists.txt b/zmk/app/CMakeLists.txt new file mode 100644 index 00000000..0ffd391e --- /dev/null +++ b/zmk/app/CMakeLists.txt @@ -0,0 +1,70 @@ +cmake_minimum_required(VERSION 3.13.1) + +set(CONFIG_APPLICATION_DEFINED_SYSCALL true) +list(APPEND BOARD_ROOT ${CMAKE_SOURCE_DIR}) +list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR}) + +# Add our custom Zephyr module for drivers w/ syscalls, etc. +list(APPEND DTS_ROOT ${CMAKE_SOURCE_DIR}/drivers/zephyr) + +list(APPEND ZEPHYR_EXTRA_MODULES + ${CMAKE_CURRENT_SOURCE_DIR}/drivers +) +list(APPEND SYSCALL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/drivers/zephyr) + +include(cmake/zmk_config.cmake) + +# Find Zephyr. This also loads Zephyr's build system. +find_package(Zephyr REQUIRED HINTS ../zephyr) +project(zmk) + +zephyr_linker_sources(RODATA include/linker/zmk-events.ld) + +# Add your source file to the "app" target. This must come after +# find_package(Zephyr) which defines the target. +target_include_directories(app PRIVATE include) +target_sources_ifdef(CONFIG_ZMK_SLEEP app PRIVATE src/power.c) +target_sources(app PRIVATE src/kscan.c) +target_sources(app PRIVATE src/matrix_transform.c) +target_sources(app PRIVATE src/hid.c) +target_sources(app PRIVATE src/sensors.c) +target_sources_ifdef(CONFIG_ZMK_DISPLAY app PRIVATE src/display.c) +target_sources(app PRIVATE src/event_manager.c) +target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c) +target_sources(app PRIVATE src/events/position_state_changed.c) +target_sources(app PRIVATE src/events/keycode_state_changed.c) +target_sources(app PRIVATE src/events/modifiers_state_changed.c) +target_sources(app PRIVATE src/events/sensor_event.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/events/ble_active_profile_changed.c) +target_sources_ifdef(CONFIG_USB app PRIVATE src/events/usb_conn_state_changed.c) +if (NOT CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + target_sources(app PRIVATE src/behaviors/behavior_key_press.c) + target_sources(app PRIVATE src/behaviors/behavior_reset.c) + target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c) + target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c) + target_sources(app PRIVATE src/behaviors/behavior_outputs.c) + target_sources(app PRIVATE src/behaviors/behavior_toggle_layer.c) + target_sources(app PRIVATE src/behaviors/behavior_transparent.c) + target_sources(app PRIVATE src/behaviors/behavior_none.c) + target_sources(app PRIVATE src/behaviors/behavior_sensor_rotate_key_press.c) + target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c) + target_sources(app PRIVATE src/keymap.c) +endif() +target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/behaviors/behavior_rgb_underglow.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/behaviors/behavior_bt.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/ble.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/battery.c) +target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split_listener.c) +target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL app PRIVATE src/split/bluetooth/service.c) +target_sources_ifdef(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL app PRIVATE src/split/bluetooth/central.c) +target_sources_ifdef(CONFIG_ZMK_KSCAN_MOCK_DRIVER app PRIVATE src/kscan_mock.c) +target_sources_ifdef(CONFIG_ZMK_KSCAN_COMPOSITE_DRIVER app PRIVATE src/kscan_composite.c) +target_sources_ifdef(CONFIG_USB app PRIVATE src/usb.c) +target_sources_ifdef(CONFIG_ZMK_BLE app PRIVATE src/hog.c) +target_sources_ifdef(CONFIG_ZMK_RGB_UNDERGLOW app PRIVATE src/rgb_underglow.c) +target_sources(app PRIVATE src/endpoints.c) +target_sources(app PRIVATE src/hid_listener.c) +target_sources_ifdef(CONFIG_SETTINGS app PRIVATE src/settings.c) +target_sources(app PRIVATE src/main.c) + +zephyr_cc_option(-Wfatal-errors) diff --git a/zmk/app/Kconfig b/zmk/app/Kconfig new file mode 100644 index 00000000..28d2aa2e --- /dev/null +++ b/zmk/app/Kconfig @@ -0,0 +1,327 @@ +mainmenu "ZMK Firmware" + +menu "ZMK" + +menu "Basic Keyboard Setup" + +config ZMK_KEYBOARD_NAME + string "Keyboard Name" + +config USB_DEVICE_PRODUCT + default ZMK_KEYBOARD_NAME + +config BT_DEVICE_NAME + default ZMK_KEYBOARD_NAME + +config USB_DEVICE_VID + default 0x1D50 + +config USB_DEVICE_PID + default 0x615E + +config USB_DEVICE_MANUFACTURER + default "ZMK Project" + +menu "HID Output Types" + +config ZMK_USB + bool "USB" + select USB + select USB_DEVICE_STACK + select USB_DEVICE_HID + +if ZMK_USB + +config USB_NUMOF_EP_WRITE_RETRIES + default 10 + +#ZMK_USB +endif + +config ZMK_BLE + bool "BLE (HID over GATT)" + select BT + select BT_SMP + select BT_SMP_SC_PAIR_ONLY + select BT_SMP_APP_PAIRING_ACCEPT + select BT_PERIPHERAL + select BT_GATT_DIS + select BT_GATT_BAS + select BT_SETTINGS + select SETTINGS + +if ZMK_BLE + +config SYSTEM_WORKQUEUE_STACK_SIZE + default 2048 + +config ZMK_BLE_CLEAR_BONDS_ON_START + bool "Configuration that clears all bond information from the keyboard on startup." + default n + +# HID GATT notifications sent this way are *not* picked up by Linux, and possibly others. +config BT_GATT_NOTIFY_MULTIPLE + default n + +config BT_DEVICE_APPEARANCE + default 961 + +config ZMK_BLE_PASSKEY_ENTRY + bool "Experimental: Requiring typing passkey from host to pair BLE connection" + default n + +#ZMK_BLE +endif + +#HID Output Types +endmenu + +menu "Split Support" + +config ZMK_SPLIT + bool "Split keyboard support" + default n + +if ZMK_SPLIT + +config ZMK_SPLIT_BLE + bool "Split keyboard support via BLE transport" + depends on ZMK_BLE + default y + select BT_USER_PHY_UPDATE + +if ZMK_SPLIT_BLE + +choice ZMK_SPLIT_BLE_ROLE + bool "BLE Role For Split Communication" + default ZMK_SPLIT_BLE_ROLE_CENTRAL + +config ZMK_SPLIT_BLE_ROLE_CENTRAL + bool "Central" + select BT_CENTRAL + select BT_GATT_CLIENT + +config ZMK_SPLIT_BLE_ROLE_PERIPHERAL + bool "Peripheral" + +if ZMK_SPLIT_BLE_ROLE_PERIPHERAL + +config ZMK_USB + default n + +config BT_MAX_PAIRED + default 1 + +config BT_MAX_CONN + default 1 + +config BT_GAP_AUTO_UPDATE_CONN_PARAMS + default n + +#ZMK_SPLIT_BLE_ROLE_PERIPHERAL +endif + +#ZMK_SPLIT_BLE_ROLE +endchoice + +#ZMK_SPLIT_BLE +endif + +#ZMK_SPLIT +endif + +if ZMK_BLE + +if ZMK_SPLIT_BLE && ZMK_SPLIT_BLE_ROLE_CENTRAL + +config BT_MAX_CONN + default 6 + +config BT_MAX_PAIRED + default 6 + +#ZMK_SPLIT_BLE && ZMK_SPLIT_BLE_ROLE_CENTRAL +endif + +if !ZMK_SPLIT_BLE + +config BT_MAX_CONN + default 5 + +config BT_MAX_PAIRED + default 5 + +#!ZMK_SPLIT_BLE +endif + +#ZMK_BLE +endif + +#Split Support +endmenu + +#Basic Keyboard Setup +endmenu + +menu "Display/LED Options" + +config ZMK_DISPLAY + bool "ZMK display support" + default n + select DISPLAY + select LVGL + select LVGL_THEMES + select LVGL_THEME_MONO + select LVGL_OBJ_LABEL + +config ZMK_RGB_UNDERGLOW + bool "RGB Adressable LED Underglow" + select LED_STRIP + +if ZMK_RGB_UNDERGLOW + +# This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this +config SPI + default y + +config ZMK_RGB_UNDERGLOW_HUE_STEP + int "RGB underglow hue step in degrees of 360" + default 10 + +config ZMK_RGB_UNDERGLOW_SAT_STEP + int "RGB underglow sturation step in percent" + default 10 + +config ZMK_RGB_UNDERGLOW_BRT_STEP + int "RGB underglow brightness step in percent" + default 10 + +config ZMK_RGB_UNDERGLOW_HUE_START + int "RGB underglow start hue value from 0-359" + default 0 + +config ZMK_RGB_UNDERGLOW_SAT_START + int "RGB underglow start saturations value from 0-100" + default 100 + +config ZMK_RGB_UNDERGLOW_BRT_START + int "RGB underglow start brightness value from 0-100" + default 100 + +config ZMK_RGB_UNDERGLOW_SPD_START + int "RGB underglow start animation speed value from 1-5" + default 3 + +config ZMK_RGB_UNDERGLOW_EFF_START + int "RGB underglow start effect int value related to the effect enum list" + default 0 + +config ZMK_RGB_UNDERGLOW_ON_START + bool "Whether RGB underglow starts on by default" + default y + +#ZMK_RGB_UNDERGLOW +endif + +#Display/LED Options +endmenu + +menu "Power Management" + +config ZMK_SLEEP + bool "Enable deep sleep support" + imply USB + +if ZMK_SLEEP + +config SYS_POWER_DEEP_SLEEP_STATES + default y + +choice SYS_PM_POLICY + default SYS_PM_POLICY_APP +endchoice + +config ZMK_IDLE_SLEEP_TIMEOUT + int "Milliseconds to wait to sleep when going idle" + default 900000 + +#ZMK_SLEEP +endif + +config ZMK_EXT_POWER + bool "Enable support to control external power output" + default y + +#Power Management +endmenu + +menu "Advanced" + +menu "Initialization Priorities" + +if USB + +config ZMK_USB_INIT_PRIORITY + int "USB Init Priority" + default 50 + +#USB +endif + +if ZMK_BLE || ZMK_SPLIT_BLE + +config ZMK_BLE_INIT_PRIORITY + int "BLE Init Priority" + default 50 + +#ZMK_BLE || ZMK_SPLIT_BLE +endif + +#Initialization Priorities +endmenu + +menu "KSCAN Settings" + +config ZMK_KSCAN_EVENT_QUEUE_SIZE + int "Size of the event queue for KSCAN events to buffer events" + default 4 + +config ZMK_KSCAN_MOCK_DRIVER + bool "Enable mock kscan driver to simulate key presses" + default n + +config ZMK_KSCAN_COMPOSITE_DRIVER + bool "Enable composite kscan driver to combine kscan devices" + default n + +#KSCAN Settings +endmenu + +#Advanced +endmenu + +#ZMK +endmenu + +config HEAP_MEM_POOL_SIZE + default 8192 + +config KERNEL_BIN_NAME + default "zmk" + +config REBOOT + default y + +module = ZMK +module-str = zmk +source "subsys/logging/Kconfig.template.log_config" + +rsource "boards/Kconfig" +rsource "boards/shields/*/Kconfig.defconfig" +rsource "boards/shields/*/Kconfig.shield" + +osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig" +osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield" + +source "Kconfig.zephyr" + diff --git a/zmk/app/boards/Kconfig b/zmk/app/boards/Kconfig new file mode 100644 index 00000000..1c645e6b --- /dev/null +++ b/zmk/app/boards/Kconfig @@ -0,0 +1 @@ +rsource "shields/*/Kconfig.shield" diff --git a/zmk/app/boards/arm/bluemicro840/CMakeLists.txt b/zmk/app/boards/arm/bluemicro840/CMakeLists.txt new file mode 100644 index 00000000..00952c30 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/zmk/app/boards/arm/bluemicro840/Kconfig b/zmk/app/boards/arm/bluemicro840/Kconfig new file mode 100644 index 00000000..0e6743d3 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/Kconfig @@ -0,0 +1,8 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_BLUEMICRO840_V1 + diff --git a/zmk/app/boards/arm/bluemicro840/Kconfig.board b/zmk/app/boards/arm/bluemicro840/Kconfig.board new file mode 100644 index 00000000..bc271af3 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/Kconfig.board @@ -0,0 +1,8 @@ +# BlueMicro840 board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +config BOARD_BLUEMICRO840_V1 + bool "BlueMicro840_V1" + depends on SOC_NRF52840_QIAA diff --git a/zmk/app/boards/arm/bluemicro840/Kconfig.defconfig b/zmk/app/boards/arm/bluemicro840/Kconfig.defconfig new file mode 100644 index 00000000..2b55e17c --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/Kconfig.defconfig @@ -0,0 +1,33 @@ +# BlueMicro840 board configuration + +# Copyright (c) 2020 Pete Johanson, Derek Schmell +# SPDX-License-Identifier: MIT + +if BOARD_BLUEMICRO840_V1 + +config BOARD + default "bluemicro840_v1" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_BLUEMICRO840_V1 diff --git a/zmk/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi b/zmk/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000..940d8913 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/arduino_pro_micro_pins.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 D2 */ + , <1 0 &gpio0 6 0> /* D1 D3*/ + , <2 0 &gpio0 15 0> /* D2 D1*/ + , <3 0 &gpio0 17 0> /* D3 D0*/ + , <4 0 &gpio0 20 0> /* D4/A6 D4*/ + , <5 0 &gpio0 13 0> /* D5 C6*/ + , <6 0 &gpio0 24 0> /* D6/A7 D7*/ + , <7 0 &gpio0 9 0> /* D7 E6*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 11 0> /* D10/A10 B6*/ + , <16 0 &gpio0 28 0> /* D16 B2*/ + , <14 0 &gpio0 3 0> /* D14 B3*/ + , <15 0 &gpio1 13 0> /* D15 B1*/ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* A0 F7*/ + , <1 0 &gpio0 29 0> /* A1 F6*/ + , <2 0 &gpio0 26 0> /* A2 F5*/ + , <3 0 &gpio0 30 0> /* A3 F4*/ + , <6 0 &gpio0 20 0> /* D4/A6 D4*/ + , <7 0 &gpio0 24 0> /* D6/A7 D7*/ + , <8 0 &gpio0 10 0> /* D8/A8 B4*/ + , <9 0 &gpio1 6 0> /* D9/A9 B5*/ + , <10 0 &gpio1 13 0> /* D10/A10 B6*/ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.dts b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.dts new file mode 100644 index 00000000..18dff1af --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.dts @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2020 Pete Johanson, Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "BlueMicro840_V1"; + compatible = "bluemicro840,v1"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 7>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; + +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.yaml b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.yaml new file mode 100644 index 00000000..9e1dd54c --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1.yaml @@ -0,0 +1,15 @@ +identifier: bluemicro840_v1 +name: BlueMicro840_V1 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig new file mode 100644 index 00000000..96f03ca4 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/bluemicro840_v1_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_BLUEMICRO840_V1=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y \ No newline at end of file diff --git a/zmk/app/boards/arm/bluemicro840/board.cmake b/zmk/app/boards/arm/bluemicro840/board.cmake new file mode 100644 index 00000000..fa847d50 --- /dev/null +++ b/zmk/app/boards/arm/bluemicro840/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/zmk/app/boards/arm/dz60rgb/CMakeLists.txt b/zmk/app/boards/arm/dz60rgb/CMakeLists.txt new file mode 100644 index 00000000..940af1fe --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/CMakeLists.txt @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() diff --git a/zmk/app/boards/arm/dz60rgb/Kconfig.board b/zmk/app/boards/arm/dz60rgb/Kconfig.board new file mode 100644 index 00000000..ec8dad68 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/Kconfig.board @@ -0,0 +1,6 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_DZ60RGB_REV1 + bool "DZ60RGB Keyboard" + depends on SOC_STM32F303XC diff --git a/zmk/app/boards/arm/dz60rgb/Kconfig.defconfig b/zmk/app/boards/arm/dz60rgb/Kconfig.defconfig new file mode 100644 index 00000000..779d3123 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/Kconfig.defconfig @@ -0,0 +1,14 @@ +# DZ60RGB keyboard configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_DZ60RGB_REV1 + +config ZMK_KEYBOARD_NAME + default "DZ60RGB Rev 1" + +config ZMK_USB + default y + +endif # BOARD_DZ60RGB_REV1 diff --git a/zmk/app/boards/arm/dz60rgb/board.cmake b/zmk/app/boards/arm/dz60rgb/board.cmake new file mode 100644 index 00000000..10f6e291 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F303CC" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.dts b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.dts new file mode 100644 index 00000000..85c4ca56 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.dts @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include + +#include + +/ { + model = "DZ60RGB, Rev 1"; + compatible = "dz60rgb,rev1", "st,stm32f303"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <5>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,13) +RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,13) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpioa 6 GPIO_ACTIVE_HIGH> + , <&gpioa 7 GPIO_ACTIVE_HIGH> + , <&gpiob 0 GPIO_ACTIVE_HIGH> + , <&gpiob 13 GPIO_ACTIVE_HIGH> + , <&gpiob 15 GPIO_ACTIVE_HIGH> + , <&gpioa 8 GPIO_ACTIVE_HIGH> + , <&gpioa 15 GPIO_ACTIVE_HIGH> + , <&gpiob 3 GPIO_ACTIVE_HIGH> + , <&gpiob 4 GPIO_ACTIVE_HIGH> + , <&gpiob 5 GPIO_ACTIVE_HIGH> + , <&gpiob 8 GPIO_ACTIVE_HIGH> + , <&gpiob 9 GPIO_ACTIVE_HIGH> + , <&gpioc 13 GPIO_ACTIVE_HIGH> + , <&gpioc 14 GPIO_ACTIVE_HIGH> + ; + }; + +}; + +&usb { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; +}; diff --git a/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap new file mode 100644 index 00000000..8de01c17 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.keymap @@ -0,0 +1,25 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | +// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" | +// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | +// | SHIFT | Z | X | C | V | B | N | M | , | . | SHIFT(/) | ^ | DEL | +// | CTL | WIN | ALT | SPACE | ALT | MO(1) | <- | v | -> | +// ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL &kp BKSP + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp RET + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt MOD_RSFT FSLH &kp UARW &kp DEL + &kp LCTL &kp LGUI &kp LALT &kp SPC &kp RALT &mo 1 &kp LARW &kp DARW &kp RARW + >; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.yaml b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.yaml new file mode 100644 index 00000000..d2836218 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1.yaml @@ -0,0 +1,19 @@ +identifier: DZ60RGB_rev1 +name: DZ60RGBREV1 +type: keyboard +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - lsm303dlhc + - nvs + - can + - kscan diff --git a/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig new file mode 100644 index 00000000..33840f96 --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/dz60rgb_rev1_defconfig @@ -0,0 +1,27 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_STM32F3X=y +CONFIG_SOC_STM32F303XC=y +# 72MHz system clock +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 + +# enable pinmux +CONFIG_PINMUX=y + +# enable GPIO +CONFIG_GPIO=y + +# clock configuration +CONFIG_CLOCK_CONTROL=y + +# Clock configuration for Cube Clock control driver +CONFIG_CLOCK_STM32_HSE_CLOCK=8000000 +CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y +# use HSE as PLL input +CONFIG_CLOCK_STM32_PLL_SRC_HSE=y +# produce 72MHz clock at PLL output +CONFIG_CLOCK_STM32_PLL_PREDIV=1 +CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 +CONFIG_CLOCK_STM32_AHB_PRESCALER=1 +CONFIG_CLOCK_STM32_APB1_PRESCALER=2 +CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/zmk/app/boards/arm/dz60rgb/pinmux.c b/zmk/app/boards/arm/dz60rgb/pinmux.c new file mode 100644 index 00000000..f59a31bf --- /dev/null +++ b/zmk/app/boards/arm/dz60rgb/pinmux.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017 I-SENSE group of ICCS + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +/* pin assignments for STM32F3DISCOVERY board */ +static const struct pin_config pinconf[] = { +#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart1), okay) && CONFIG_SERIAL + {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, + {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart2), okay) && CONFIG_SERIAL + {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, + {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c1), okay) && CONFIG_I2C + {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, + {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c2), okay) && CONFIG_I2C + {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, + {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi1), okay) && CONFIG_SPI +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, + {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, + {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi2), okay) && CONFIG_SPI +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, + {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, + {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, +#endif +#ifdef CONFIG_USB_DC_STM32 + {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, + {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, +#endif /* CONFIG_USB_DC_STM32 */ +#if DT_NODE_HAS_STATUS(DT_NODELABEL(can1), okay) && CONFIG_CAN + {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, + {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, +#endif +}; + +static int pinmux_stm32_init(struct device *port) { + ARG_UNUSED(port); + + stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); + + return 0; +} + +SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); \ No newline at end of file diff --git a/zmk/app/boards/arm/nice_nano/CMakeLists.txt b/zmk/app/boards/arm/nice_nano/CMakeLists.txt new file mode 100644 index 00000000..00952c30 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/CMakeLists.txt @@ -0,0 +1,8 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/zmk/app/boards/arm/nice_nano/Kconfig b/zmk/app/boards/arm/nice_nano/Kconfig new file mode 100644 index 00000000..fb5537ab --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/Kconfig @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NICE_NANO diff --git a/zmk/app/boards/arm/nice_nano/Kconfig.board b/zmk/app/boards/arm/nice_nano/Kconfig.board new file mode 100644 index 00000000..4fd394f4 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/Kconfig.board @@ -0,0 +1,9 @@ +# nice!nano board configuration + +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config BOARD_NICE_NANO + bool "nice!nano" + depends on SOC_NRF52840_QIAA + diff --git a/zmk/app/boards/arm/nice_nano/Kconfig.defconfig b/zmk/app/boards/arm/nice_nano/Kconfig.defconfig new file mode 100644 index 00000000..205050af --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/Kconfig.defconfig @@ -0,0 +1,31 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +if BOARD_NICE_NANO + +config BOARD + default "nice_nano" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_NICE_NANO diff --git a/zmk/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi b/zmk/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000..806cd244 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/arduino_pro_micro_pins.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 17 0> /* D2 */ + , <3 0 &gpio0 20 0> /* D3 */ + , <4 0 &gpio0 22 0> /* D4/A6 */ + , <5 0 &gpio0 24 0> /* D5 */ + , <6 0 &gpio1 0 0> /* D6/A7 */ + , <7 0 &gpio0 11 0> /* D7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio1 11 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio1 15 0> /* A0 */ + , <1 0 &gpio0 2 0> /* A1 */ + , <2 0 &gpio0 29 0> /* A2 */ + , <3 0 &gpio0 31 0> /* A3 */ + , <6 0 &gpio0 22 0> /* D4/A6 */ + , <7 0 &gpio1 0 0> /* D6/A7 */ + , <8 0 &gpio1 4 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio0 9 0> /* D10/A10 */ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/zmk/app/boards/arm/nice_nano/board.cmake b/zmk/app/boards/arm/nice_nano/board.cmake new file mode 100644 index 00000000..fa847d50 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/zmk/app/boards/arm/nice_nano/nice_nano.dts b/zmk/app/boards/arm/nice_nano/nice_nano.dts new file mode 100644 index 00000000..01efb289 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/nice_nano.dts @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nice!nano"; + compatible = "nice,nano"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 806000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <17>; + scl-pin = <20>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/zmk/app/boards/arm/nice_nano/nice_nano.yaml b/zmk/app/boards/arm/nice_nano/nice_nano.yaml new file mode 100644 index 00000000..1c367324 --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/nice_nano.yaml @@ -0,0 +1,15 @@ +identifier: nice_nano +name: nice!nano +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/nice_nano/nice_nano_defconfig b/zmk/app/boards/arm/nice_nano/nice_nano_defconfig new file mode 100644 index 00000000..393d61fe --- /dev/null +++ b/zmk/app/boards/arm/nice_nano/nice_nano_defconfig @@ -0,0 +1,20 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NICE_NANO=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y \ No newline at end of file diff --git a/zmk/app/boards/arm/nrf52840_m2/CMakeLists.txt b/zmk/app/boards/arm/nrf52840_m2/CMakeLists.txt new file mode 100644 index 00000000..84b2ab99 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/CMakeLists.txt @@ -0,0 +1,13 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) diff --git a/zmk/app/boards/arm/nrf52840_m2/Kconfig b/zmk/app/boards/arm/nrf52840_m2/Kconfig new file mode 100644 index 00000000..faff4925 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/Kconfig @@ -0,0 +1,10 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on BOARD_NRF52840_M2 diff --git a/zmk/app/boards/arm/nrf52840_m2/Kconfig.board b/zmk/app/boards/arm/nrf52840_m2/Kconfig.board new file mode 100644 index 00000000..6ade68c1 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/Kconfig.board @@ -0,0 +1,10 @@ +# Maker Diary nrf52840 M.2 board configuration +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config BOARD_NRF52840_M2 + bool "nrf52480_m2" + depends on SOC_NRF52840_QIAA + diff --git a/zmk/app/boards/arm/nrf52840_m2/Kconfig.defconfig b/zmk/app/boards/arm/nrf52840_m2/Kconfig.defconfig new file mode 100644 index 00000000..98fcd083 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/Kconfig.defconfig @@ -0,0 +1,30 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +if BOARD_NRF52840_M2 + +config BOARD + default "nrf52480_m2" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +endif # BOARD_NRF52840_M2 diff --git a/zmk/app/boards/arm/nrf52840_m2/board.cmake b/zmk/app/boards/arm/nrf52840_m2/board.cmake new file mode 100644 index 00000000..55b44e27 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/board.cmake @@ -0,0 +1,9 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") + +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) diff --git a/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.dts b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.dts new file mode 100644 index 00000000..f9354edf --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.dts @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include + +/ { + model = "Makerdiary nRF52840 M.2 module"; + compatible = "makerdiary,nrf52840_m2"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + red_led: led_0 { + gpios = <&gpio0 30 GPIO_ACTIVE_HIGH>; + label = "Red LED"; + }; + green_led: led_1 { + gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>; + label = "Green LED"; + }; + blue_led: led_2 { + gpios = <&gpio0 31 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + compatible = "nordic,nrf-usbd"; + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.yaml b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.yaml new file mode 100644 index 00000000..0a999bbf --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2.yaml @@ -0,0 +1,15 @@ +identifier: nrf52840_m2 +name: Makerdiary nRF52840 M.2 module +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig new file mode 100644 index 00000000..e74438b7 --- /dev/null +++ b/zmk/app/boards/arm/nrf52840_m2/nrf52840_m2_defconfig @@ -0,0 +1,23 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRF52840_M2=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y diff --git a/zmk/app/boards/arm/nrfmicro/CMakeLists.txt b/zmk/app/boards/arm/nrfmicro/CMakeLists.txt new file mode 100644 index 00000000..cd4843af --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/CMakeLists.txt @@ -0,0 +1,14 @@ +set_property(GLOBAL APPEND PROPERTY extra_post_build_commands + COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py + -c + -b 0x26000 + -f 0xADA52840 + -o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2 + ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin +) + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() \ No newline at end of file diff --git a/zmk/app/boards/arm/nrfmicro/Kconfig b/zmk/app/boards/arm/nrfmicro/Kconfig new file mode 100644 index 00000000..35019722 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/Kconfig @@ -0,0 +1,10 @@ +config BOARD_ENABLE_DCDC + bool "Enable DCDC mode" + select SOC_DCDC_NRF52X + default y + depends on (BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13) + +config BOARD_NRFMICRO_CHARGER + bool "Enable battery charger" + default y + depends on (BOARD_NRFMICRO_13) diff --git a/zmk/app/boards/arm/nrfmicro/Kconfig.board b/zmk/app/boards/arm/nrfmicro/Kconfig.board new file mode 100644 index 00000000..36b2d55e --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/Kconfig.board @@ -0,0 +1,16 @@ +# nrfmicro board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_NRFMICRO_11 + bool "nrfmicro_11" + depends on SOC_NRF52840_QIAA + +config BOARD_NRFMICRO_11_FLIPPED + bool "nrfmicro_11_flipped" + depends on SOC_NRF52840_QIAA + +config BOARD_NRFMICRO_13 + bool "nrfmicro_13" + depends on SOC_NRF52840_QIAA diff --git a/zmk/app/boards/arm/nrfmicro/Kconfig.defconfig b/zmk/app/boards/arm/nrfmicro/Kconfig.defconfig new file mode 100644 index 00000000..a3c02c22 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/Kconfig.defconfig @@ -0,0 +1,43 @@ +# Electronut Labs Papyr board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 + +config BOARD + default "nrfmicro" + +if USB + +config USB_NRFX + default y + +config USB_DEVICE_STACK + default y + +endif # USB + +config BT_CTLR + default BT + +config ZMK_BLE + default y + +config ZMK_USB + default y + +config PINMUX + default y + +if BOARD_NRFMICRO_13 + +config BOARD_NRFMICRO_CHARGER + default y + +config ZMK_BATTERY_VOLTAGE_DIVIDER + default y + +endif # BOARD_NRFMICRO_13 + +endif # BOARD_NRFMICRO_11 || BOARD_NRFMICRO_11_FLIPPED || BOARD_NRFMICRO_13 diff --git a/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi b/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000..558391dd --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins.dtsi @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 15 0> /* D2 */ + , <3 0 &gpio0 17 0> /* D3 */ + , <4 0 &gpio0 20 0> /* D4/A6 */ + , <5 0 &gpio0 13 0> /* D5 */ + , <6 0 &gpio0 24 0> /* D6/A7 */ + , <7 0 &gpio0 9 0> /* D7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + , <16 0 &gpio0 28 0> /* D16 */ + , <14 0 &gpio0 3 0> /* D14 */ + , <15 0 &gpio1 13 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 2 0> /* A0 */ + , <1 0 &gpio0 29 0> /* A1 */ + , <2 0 &gpio0 31 0> /* A2 */ + , <3 0 &gpio0 30 0> /* A3 */ + , <6 0 &gpio0 20 0> /* D4/A6 */ + , <7 0 &gpio0 24 0> /* D6/A7 */ + , <8 0 &gpio0 10 0> /* D8/A8 */ + , <9 0 &gpio1 6 0> /* D9/A9 */ + , <10 0 &gpio1 11 0> /* D10/A10 */ + ; + }; +}; + + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi b/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi new file mode 100644 index 00000000..68ca266d --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/arduino_pro_micro_pins_flipped.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 8 0> /* D0 */ + , <1 0 &gpio0 6 0> /* D1 */ + , <2 0 &gpio0 30 0> /* D2 */ + , <3 0 &gpio0 31 0> /* D3 */ + , <4 0 &gpio0 29 0> /* D4/A6 */ + , <5 0 &gpio0 2 0> /* D5 */ + , <6 0 &gpio1 13 0> /* D6/A7 */ + , <7 0 &gpio0 3 0> /* D7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + , <16 0 &gpio0 10 0> /* D16 */ + , <14 0 &gpio0 9 0> /* D14 */ + , <15 0 &gpio0 24 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpio0 13 0> /* A0 */ + , <1 0 &gpio0 20 0> /* A1 */ + , <2 0 &gpio0 17 0> /* A2 */ + , <3 0 &gpio0 15 0> /* A3 */ + , <6 0 &gpio0 29 0> /* D4/A6 */ + , <7 0 &gpio1 13 0> /* D6/A7 */ + , <8 0 &gpio0 28 0> /* D8/A8 */ + , <9 0 &gpio1 11 0> /* D9/A9 */ + , <10 0 &gpio1 6 0> /* D10/A10 */ + ; + }; +}; + +pro_micro_i2c: &i2c0 {}; +pro_micro_spi: &spi0 {}; +pro_micro_serial: &uart0 {}; diff --git a/zmk/app/boards/arm/nrfmicro/board.cmake b/zmk/app/boards/arm/nrfmicro/board.cmake new file mode 100644 index 00000000..fa847d50 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/board.cmake @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset") +include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake) +include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake) diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11.dts b/zmk/app/boards/arm/nrfmicro/nrfmicro_11.dts new file mode 100644 index 00000000..164b66d2 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11.dts @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + }; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11.yaml b/zmk/app/boards/arm/nrfmicro/nrfmicro_11.yaml new file mode 100644 index 00000000..4608130d --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_11 +name: nrfmicro_11 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11_defconfig b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_defconfig new file mode 100644 index 00000000..c1ac8364 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_11=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts new file mode 100644 index 00000000..fb558382 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.dts @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins_flipped.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_HIGH>; + }; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <30>; + scl-pin = <31>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml new file mode 100644 index 00000000..74461f09 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_11_flipped +name: nrfmicro_11_flipped +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig new file mode 100644 index 00000000..b35cb791 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_11_flipped_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_11_FLIPPED=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_13.dts b/zmk/app/boards/arm/nrfmicro/nrfmicro_13.dts new file mode 100644 index 00000000..1a05c7a1 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_13.dts @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "nrfmicro"; + compatible = "joric,nrfmicro"; + + chosen { + zephyr,code-partition = &code_partition; + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + blue_led: led_0 { + gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>; + label = "Blue LED"; + }; + }; + + ext-power { + compatible = "zmk,ext-power-generic"; + label = "EXT_POWER"; + control-gpios = <&gpio1 9 GPIO_ACTIVE_LOW>; + }; + + vbatt { + compatible = "zmk,battery-voltage-divider"; + label = "BATTERY"; + io-channels = <&adc 2>; + output-ohms = <2000000>; + full-ohms = <(2000000 + 820000)>; + }; +}; + +&adc { + status = "okay"; +}; + +&gpiote { + status = "okay"; +}; + +&gpio0 { + status = "okay"; +}; + +&gpio1 { + status = "okay"; +}; + +&i2c0 { + compatible = "nordic,nrf-twi"; + sda-pin = <15>; + scl-pin = <17>; +}; + +&uart0 { + compatible = "nordic,nrf-uarte"; + status = "okay"; + current-speed = <115200>; + tx-pin = <19>; + rx-pin = <21>; + rts-pin = <23>; + cts-pin = <25>; +}; + +&usbd { + status = "okay"; +}; + + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + sd_partition: partition@0 { + label = "softdevice"; + reg = <0x00000000 0x00026000>; + }; + code_partition: partition@26000 { + label = "code_partition"; + reg = <0x00026000 0x000c6000>; + }; + + /* + * The flash starting at 0x000ec000 and ending at + * 0x000f3fff is reserved for use by the application. + */ + + /* + * Storage partition will be used by FCB/LittleFS/NVS + * if enabled. + */ + storage_partition: partition@ec000 { + label = "storage"; + reg = <0x000ec000 0x00008000>; + }; + + boot_partition: partition@f4000 { + label = "adafruit_boot"; + reg = <0x000f4000 0x0000c000>; + }; + }; +}; diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_13.yaml b/zmk/app/boards/arm/nrfmicro/nrfmicro_13.yaml new file mode 100644 index 00000000..a7415e44 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_13.yaml @@ -0,0 +1,15 @@ +identifier: nrfmicro_13 +name: nrfmicro_13 +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +supported: + - adc + - usb_device + - ble + - ieee802154 + - pwm + - watchdog diff --git a/zmk/app/boards/arm/nrfmicro/nrfmicro_13_defconfig b/zmk/app/boards/arm/nrfmicro/nrfmicro_13_defconfig new file mode 100644 index 00000000..cac11642 --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/nrfmicro_13_defconfig @@ -0,0 +1,22 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_NRF52X=y +CONFIG_SOC_NRF52840_QIAA=y +CONFIG_BOARD_NRFMICRO_13=y + +# Enable MPU +CONFIG_ARM_MPU=y + +# enable GPIO +CONFIG_GPIO=y + +CONFIG_USE_DT_CODE_PARTITION=y + +CONFIG_MPU_ALLOW_FLASH_WRITE=y +CONFIG_NVS=y +CONFIG_SETTINGS_NVS=y +CONFIG_FLASH=y +CONFIG_FLASH_PAGE_LAYOUT=y +CONFIG_FLASH_MAP=y +CONFIG_CLOCK_CONTROL_NRF=y +CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y diff --git a/zmk/app/boards/arm/nrfmicro/pinmux.c b/zmk/app/boards/arm/nrfmicro/pinmux.c new file mode 100644 index 00000000..30117d0f --- /dev/null +++ b/zmk/app/boards/arm/nrfmicro/pinmux.c @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include +#include + +static int pinmux_nrfmicro_init(struct device *port) { + ARG_UNUSED(port); + +#if CONFIG_BOARD_NRFMICRO_13 + struct device *p0 = device_get_binding("GPIO_0"); +#if CONFIG_BOARD_NRFMICRO_CHARGER + gpio_pin_configure(p0, 5, GPIO_OUTPUT); + gpio_pin_set(p0, 5, 0); +#else + gpio_pin_configure(p0, 5, GPIO_INPUT); +#endif +#endif + return 0; +} + +SYS_INIT(pinmux_nrfmicro_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/zmk/app/boards/arm/planck/CMakeLists.txt b/zmk/app/boards/arm/planck/CMakeLists.txt new file mode 100644 index 00000000..6a0ec73e --- /dev/null +++ b/zmk/app/boards/arm/planck/CMakeLists.txt @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: MIT + +list(APPEND EXTRA_DTC_FLAGS "-qq") + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() diff --git a/zmk/app/boards/arm/planck/Kconfig.board b/zmk/app/boards/arm/planck/Kconfig.board new file mode 100644 index 00000000..fe15e1a9 --- /dev/null +++ b/zmk/app/boards/arm/planck/Kconfig.board @@ -0,0 +1,8 @@ +# Planck V6 board configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config BOARD_PLANCK_REV6 + bool "Planck V6 Keyboard" + depends on SOC_STM32F303XC diff --git a/zmk/app/boards/arm/planck/Kconfig.defconfig b/zmk/app/boards/arm/planck/Kconfig.defconfig new file mode 100644 index 00000000..913c1c13 --- /dev/null +++ b/zmk/app/boards/arm/planck/Kconfig.defconfig @@ -0,0 +1,17 @@ +# Planck keyboard configuration + +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if BOARD_PLANCK_REV6 + +config ZMK_KEYBOARD_NAME + default "Planck V6" + +config ZMK_USB + default y + +config ZMK_KSCAN_MATRIX_POLLING + default y + +endif # BOARD_PLANCK_REV6 diff --git a/zmk/app/boards/arm/planck/board.cmake b/zmk/app/boards/arm/planck/board.cmake new file mode 100644 index 00000000..772796da --- /dev/null +++ b/zmk/app/boards/arm/planck/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F303VC" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/zmk/app/boards/arm/planck/pinmux.c b/zmk/app/boards/arm/planck/pinmux.c new file mode 100644 index 00000000..61cc16ae --- /dev/null +++ b/zmk/app/boards/arm/planck/pinmux.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017 I-SENSE group of ICCS + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +/* pin assignments for STM32F3DISCOVERY board */ +static const struct pin_config pinconf[] = { +#ifdef CONFIG_UART_1 + {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, + {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, +#endif /* CONFIG_UART_1 */ +#ifdef CONFIG_UART_2 + {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, + {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, +#endif /* CONFIG_UART_2 */ +#ifdef CONFIG_I2C_1 + {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, + {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, +#endif /* CONFIG_I2C_1 */ +#ifdef CONFIG_I2C_2 + {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, + {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, +#endif /* CONFIG_I2C_2 */ +#ifdef CONFIG_SPI_1 +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, + {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, + {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, +#endif /* CONFIG_SPI_1 */ +#ifdef CONFIG_SPI_2 +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, + {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, + {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, +#endif /* CONFIG_SPI_2 */ +#ifdef CONFIG_USB_DC_STM32 + {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, + {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, +#endif /* CONFIG_USB_DC_STM32 */ +#ifdef CONFIG_CAN_1 + {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, + {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, +#endif /* CONFIG_CAN_1 */ +}; + +static int pinmux_stm32_init(struct device *port) { + ARG_UNUSED(port); + + stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); + + return 0; +} + +SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); diff --git a/zmk/app/boards/arm/planck/planck_rev6.dts b/zmk/app/boards/arm/planck/planck_rev6.dts new file mode 100644 index 00000000..7e69b1fc --- /dev/null +++ b/zmk/app/boards/arm/planck/planck_rev6.dts @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2017 I-SENSE group of ICCS + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include + +/ { + model = "Plack PCD, rev6"; + compatible = "planck,rev6", "st,stm32f303"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + row-gpios + = <&gpioa 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpiob 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioc 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpioa 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpiob 11 GPIO_ACTIVE_HIGH> + , <&gpiob 10 GPIO_ACTIVE_HIGH> + , <&gpiob 2 GPIO_ACTIVE_HIGH> + , <&gpiob 1 GPIO_ACTIVE_HIGH> + , <&gpioa 7 GPIO_ACTIVE_HIGH> + , <&gpiob 0 GPIO_ACTIVE_HIGH> + ; + }; + +}; + +&usb { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; +}; diff --git a/zmk/app/boards/arm/planck/planck_rev6.keymap b/zmk/app/boards/arm/planck/planck_rev6.keymap new file mode 100644 index 00000000..af1dc7c6 --- /dev/null +++ b/zmk/app/boards/arm/planck/planck_rev6.keymap @@ -0,0 +1,22 @@ +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | Y | U | I | O | P | BSPC | +// | ESC | A | S | D | F | G | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | N | M | , | . | / | RET | +// | FN | LGUI | LALT | LCTL | LOWR | SPACE | RAIS | LARW | DARW | UARW | RARW | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp DEL + &kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp BSLH &kp RET + &trans &kp LGUI &kp LALT &kp LCTL &trans &trans &kp SPC &trans &kp LARW &kp DARW &kp UARW &kp RARW + >; + }; + }; +}; diff --git a/zmk/app/boards/arm/planck/planck_rev6.yaml b/zmk/app/boards/arm/planck/planck_rev6.yaml new file mode 100644 index 00000000..9c5af3fa --- /dev/null +++ b/zmk/app/boards/arm/planck/planck_rev6.yaml @@ -0,0 +1,19 @@ +identifier: planck_rev6 +name: PLANKREV6 +type: keyboard +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - lsm303dlhc + - nvs + - can + - kscan diff --git a/zmk/app/boards/arm/planck/planck_rev6_defconfig b/zmk/app/boards/arm/planck/planck_rev6_defconfig new file mode 100644 index 00000000..e34ce002 --- /dev/null +++ b/zmk/app/boards/arm/planck/planck_rev6_defconfig @@ -0,0 +1,28 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_STM32F3X=y +CONFIG_SOC_STM32F303XC=y +# 72MHz system clock +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 + + +# enable pinmux +CONFIG_PINMUX=y + +# enable GPIO +CONFIG_GPIO=y + +# clock configuration +CONFIG_CLOCK_CONTROL=y + +# Clock configuration for Cube Clock control driver +CONFIG_CLOCK_STM32_HSE_CLOCK=8000000 +CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y +# use HSE as PLL input +CONFIG_CLOCK_STM32_PLL_SRC_HSE=y +# produce 72MHz clock at PLL output +CONFIG_CLOCK_STM32_PLL_PREDIV=1 +CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 +CONFIG_CLOCK_STM32_AHB_PRESCALER=1 +CONFIG_CLOCK_STM32_APB1_PRESCALER=2 +CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/zmk/app/boards/arm/proton_c/CMakeLists.txt b/zmk/app/boards/arm/proton_c/CMakeLists.txt new file mode 100644 index 00000000..940af1fe --- /dev/null +++ b/zmk/app/boards/arm/proton_c/CMakeLists.txt @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +if(CONFIG_PINMUX) +zephyr_library() +zephyr_library_sources(pinmux.c) +zephyr_library_include_directories(${ZEPHYR_BASE}/drivers) +endif() diff --git a/zmk/app/boards/arm/proton_c/Kconfig.board b/zmk/app/boards/arm/proton_c/Kconfig.board new file mode 100644 index 00000000..ffa7ffd6 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/Kconfig.board @@ -0,0 +1,8 @@ +# QMK Proton-C board configuration + +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config BOARD_QMK_PROTON_C + bool "QMK Proton-C" + depends on SOC_STM32F303XC diff --git a/zmk/app/boards/arm/proton_c/Kconfig.defconfig b/zmk/app/boards/arm/proton_c/Kconfig.defconfig new file mode 100644 index 00000000..78ccbabd --- /dev/null +++ b/zmk/app/boards/arm/proton_c/Kconfig.defconfig @@ -0,0 +1,14 @@ +# QMK Proton-C board configuration + +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +if BOARD_QMK_PROTON_C + +config BOARD + default "proton_c" + +config ZMK_USB + default y + +endif # BOARD_QMK_PROTON_C diff --git a/zmk/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi b/zmk/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi new file mode 100644 index 00000000..9b2a4757 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/arduino_pro_micro_pins.dtsi @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpioa 10 0> /* D0 */ + , <1 0 &gpioa 9 0> /* D1 */ + , <2 0 &gpiob 7 0> /* D2 */ + , <3 0 &gpiob 6 0> /* D3 */ + , <4 0 &gpiob 5 0> /* D4/A6 */ + , <5 0 &gpiob 4 0> /* D5 */ + , <6 0 &gpiob 3 0> /* D6/A7 */ + , <7 0 &gpiob 2 0> /* D7 */ + , <8 0 &gpiob 1 0> /* D8/A8 */ + , <9 0 &gpiob 0 0> /* D9/A9 */ + , <10 0 &gpiob 9 0> /* D10/A10 */ + , <16 0 &gpiob 15 0> /* D16 */ + , <14 0 &gpiob 14 0> /* D14 */ + , <15 0 &gpiob 13 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &gpiob 8 0> /* A0 */ + , <1 0 &gpioa 0 0> /* A1 */ + , <2 0 &gpioa 1 0> /* A2 */ + , <3 0 &gpioa 2 0> /* A3 */ + , <6 0 &gpiob 5 0> /* D4/A6 */ + , <7 0 &gpiob 3 0> /* D6/A7 */ + , <8 0 &gpiob 1 0> /* D8/A8 */ + , <9 0 &gpiob 0 0> /* D9/A9 */ + , <10 0 &gpiob 9 0> /* D10/A10 */ + ; + }; +}; + +pro_micro_i2c: &i2c1 {}; +pro_micro_spi: &spi1 {}; +pro_micro_serial: &usart1 {}; diff --git a/zmk/app/boards/arm/proton_c/board.cmake b/zmk/app/boards/arm/proton_c/board.cmake new file mode 100644 index 00000000..9da8ea91 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/board.cmake @@ -0,0 +1,7 @@ +# SPDX-License-Identifier: MIT + +board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse") +board_runner_args(jlink "--device=STM32F303CC" "--speed=4000") + +include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake) +include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake) diff --git a/zmk/app/boards/arm/proton_c/pinmux.c b/zmk/app/boards/arm/proton_c/pinmux.c new file mode 100644 index 00000000..9ffabd73 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/pinmux.c @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2017 I-SENSE group of ICCS + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +/* pin assignments for STM32F3DISCOVERY board */ +static const struct pin_config pinconf[] = { +#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart1), okay) && CONFIG_SERIAL + {STM32_PIN_PC4, STM32F3_PINMUX_FUNC_PC4_USART1_TX}, + {STM32_PIN_PC5, STM32F3_PINMUX_FUNC_PC5_USART1_RX}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(usart2), okay) && CONFIG_SERIAL + {STM32_PIN_PA2, STM32F3_PINMUX_FUNC_PA2_USART2_TX}, + {STM32_PIN_PA3, STM32F3_PINMUX_FUNC_PA3_USART2_RX}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c1), okay) && CONFIG_I2C + {STM32_PIN_PB6, STM32F3_PINMUX_FUNC_PB6_I2C1_SCL}, + {STM32_PIN_PB7, STM32F3_PINMUX_FUNC_PB7_I2C1_SDA}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(i2c2), okay) && CONFIG_I2C + {STM32_PIN_PA9, STM32F3_PINMUX_FUNC_PA9_I2C2_SCL}, + {STM32_PIN_PA10, STM32F3_PINMUX_FUNC_PA10_I2C2_SDA}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi1), okay) && CONFIG_SPI +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PA4, STM32F3_PINMUX_FUNC_PA4_SPI1_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PA5, STM32F3_PINMUX_FUNC_PA5_SPI1_SCK}, + {STM32_PIN_PA6, STM32F3_PINMUX_FUNC_PA6_SPI1_MISO}, + {STM32_PIN_PA7, STM32F3_PINMUX_FUNC_PA7_SPI1_MOSI}, +#endif +#if DT_NODE_HAS_STATUS(DT_NODELABEL(spi2), okay) && CONFIG_SPI +#ifdef CONFIG_SPI_STM32_USE_HW_SS + {STM32_PIN_PB12, STM32F3_PINMUX_FUNC_PB12_SPI2_NSS}, +#endif /* CONFIG_SPI_STM32_USE_HW_SS */ + {STM32_PIN_PB13, STM32F3_PINMUX_FUNC_PB13_SPI2_SCK}, + {STM32_PIN_PB14, STM32F3_PINMUX_FUNC_PB14_SPI2_MISO}, + {STM32_PIN_PB15, STM32F3_PINMUX_FUNC_PB15_SPI2_MOSI}, +#endif +#ifdef CONFIG_USB_DC_STM32 + {STM32_PIN_PA11, STM32F3_PINMUX_FUNC_PA11_USB_DM}, + {STM32_PIN_PA12, STM32F3_PINMUX_FUNC_PA12_USB_DP}, +#endif /* CONFIG_USB_DC_STM32 */ +#if DT_NODE_HAS_STATUS(DT_NODELABEL(can1), okay) && CONFIG_CAN + {STM32_PIN_PD0, STM32F3_PINMUX_FUNC_PD0_CAN1_RX}, + {STM32_PIN_PD1, STM32F3_PINMUX_FUNC_PD1_CAN1_TX}, +#endif +}; + +static int pinmux_stm32_init(struct device *port) { + ARG_UNUSED(port); + + stm32_setup_pins(pinconf, ARRAY_SIZE(pinconf)); + + return 0; +} + +SYS_INIT(pinmux_stm32_init, PRE_KERNEL_1, CONFIG_PINMUX_STM32_DEVICE_INITIALIZATION_PRIORITY); diff --git a/zmk/app/boards/arm/proton_c/proton_c.dts b/zmk/app/boards/arm/proton_c/proton_c.dts new file mode 100644 index 00000000..2ec57ad0 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/proton_c.dts @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/dts-v1/; +#include +#include "arduino_pro_micro_pins.dtsi" + +/ { + model = "QMK Proton C"; + compatible = "qmk,proton_c", "st,stm32f303"; + + chosen { + zephyr,sram = &sram0; + zephyr,flash = &flash0; + }; + + leds { + compatible = "gpio-leds"; + led: led_0 { + gpios = <&gpioc 13 GPIO_ACTIVE_HIGH>; + label = "User LED"; + }; + }; +}; + +&usb { + status = "okay"; +}; + +&rtc { + status = "okay"; +}; + +&flash0 { + /* + * For more information, see: + * http://docs.zephyrproject.org/latest/guides/dts/index.html#flash-partitions + */ + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + /* Set 6Kb of storage at the end of the 256Kb of flash */ + storage_partition: partition@3e800 { + label = "storage"; + reg = <0x0003e800 0x00001800>; + }; + }; +}; diff --git a/zmk/app/boards/arm/proton_c/proton_c.yaml b/zmk/app/boards/arm/proton_c/proton_c.yaml new file mode 100644 index 00000000..86b14b9a --- /dev/null +++ b/zmk/app/boards/arm/proton_c/proton_c.yaml @@ -0,0 +1,18 @@ +identifier: proton_c +name: QMK Proton-C +type: mcu +arch: arm +toolchain: + - zephyr + - gnuarmemb + - xtools +ram: 40 +supported: + - gpio + - i2c + - counter + - spi + - usb_device + - lsm303dlhc + - nvs + - can diff --git a/zmk/app/boards/arm/proton_c/proton_c_defconfig b/zmk/app/boards/arm/proton_c/proton_c_defconfig new file mode 100644 index 00000000..0f624616 --- /dev/null +++ b/zmk/app/boards/arm/proton_c/proton_c_defconfig @@ -0,0 +1,30 @@ +# SPDX-License-Identifier: MIT + +CONFIG_SOC_SERIES_STM32F3X=y +CONFIG_SOC_STM32F303XC=y +# 72MHz system clock +CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC=72000000 + +# Floating Point Options +CONFIG_FPU=y + +# enable pinmux +CONFIG_PINMUX=y + +# enable GPIO +CONFIG_GPIO=y + +# clock configuration +CONFIG_CLOCK_CONTROL=y + +# Clock configuration for Cube Clock control driver +CONFIG_CLOCK_STM32_HSE_CLOCK=8000000 +CONFIG_CLOCK_STM32_SYSCLK_SRC_PLL=y +# use HSE as PLL input +CONFIG_CLOCK_STM32_PLL_SRC_HSE=y +# produce 72MHz clock at PLL output +CONFIG_CLOCK_STM32_PLL_PREDIV=1 +CONFIG_CLOCK_STM32_PLL_MULTIPLIER=9 +CONFIG_CLOCK_STM32_AHB_PRESCALER=1 +CONFIG_CLOCK_STM32_APB1_PRESCALER=2 +CONFIG_CLOCK_STM32_APB2_PRESCALER=1 diff --git a/zmk/app/boards/native_posix.conf b/zmk/app/boards/native_posix.conf new file mode 100644 index 00000000..357b1b86 --- /dev/null +++ b/zmk/app/boards/native_posix.conf @@ -0,0 +1,8 @@ +CONFIG_KSCAN=n +CONFIG_ZMK_KSCAN_MOCK_DRIVER=y +CONFIG_ZMK_KSCAN_GPIO_DRIVER=n +CONFIG_GPIO=n +CONFIG_ZMK_BLE=n +CONFIG_LOG=y +CONFIG_LOG_BACKEND_SHOW_COLOR=n +CONFIG_ZMK_LOG_LEVEL_DBG=y diff --git a/zmk/app/boards/native_posix.overlay b/zmk/app/boards/native_posix.overlay new file mode 100644 index 00000000..bbb23b65 --- /dev/null +++ b/zmk/app/boards/native_posix.overlay @@ -0,0 +1,18 @@ +#include +#include +#include + +/ { + chosen { + zmk,kscan = &kscan; + }; + + kscan: kscan { + compatible = "zmk,kscan-mock"; + label = "KSCAN_MOCK"; + + rows = <2>; + columns = <2>; + exit-after; + }; +}; diff --git a/zmk/app/boards/shields/Kconfig.defconfig b/zmk/app/boards/shields/Kconfig.defconfig new file mode 100644 index 00000000..5b9ca9a1 --- /dev/null +++ b/zmk/app/boards/shields/Kconfig.defconfig @@ -0,0 +1,14 @@ + + + +config ZMK_KEYBOARD_NAME + default "cradios" + +# Unable to use interrupts as the same pin number is used +# across A & B controllers, and STM32F303CCT6 can't enable +# interrutps for multiple controllers for the same "line" +# for the external interrupts. +config ZMK_KSCAN_GPIO_POLLING + default y + + diff --git a/zmk/app/boards/shields/Kconfig.shield b/zmk/app/boards/shields/Kconfig.shield new file mode 100644 index 00000000..844d4332 --- /dev/null +++ b/zmk/app/boards/shields/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CRADIOS + def_bool $(shields_list_contains,cradios) diff --git a/zmk/app/boards/shields/boardsource3x4/Kconfig.defconfig b/zmk/app/boards/shields/boardsource3x4/Kconfig.defconfig new file mode 100644 index 00000000..4c55aab0 --- /dev/null +++ b/zmk/app/boards/shields/boardsource3x4/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_BOARDSOURCE3X4 + +config ZMK_KEYBOARD_NAME + default "Boardsource 3x4" + +endif \ No newline at end of file diff --git a/zmk/app/boards/shields/boardsource3x4/Kconfig.shield b/zmk/app/boards/shields/boardsource3x4/Kconfig.shield new file mode 100644 index 00000000..cda55d07 --- /dev/null +++ b/zmk/app/boards/shields/boardsource3x4/Kconfig.shield @@ -0,0 +1,6 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_BOARDSOURCE3X4 + def_bool $(shields_list_contains,boardsource3x4) + diff --git a/zmk/app/boards/shields/boardsource3x4/boardsource3x4.conf b/zmk/app/boards/shields/boardsource3x4/boardsource3x4.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/boardsource3x4/boardsource3x4.keymap b/zmk/app/boards/shields/boardsource3x4/boardsource3x4.keymap new file mode 100644 index 00000000..3b76863d --- /dev/null +++ b/zmk/app/boards/shields/boardsource3x4/boardsource3x4.keymap @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + + bindings = < + &tog 1 &kp M_PREV &kp M_PLAY &kp M_NEXT + &mo 2 &kp M_VOLD &kp UARW &kp M_VOLU + &mo 3 &kp LARW &kp DARW &kp RARW + >; + + }; + + num_layer { + bindings = < + &trans &kp NUM_7 &kp NUM_8 &kp NUM_9 + &trans &kp NUM_4 &kp NUM_5 &kp NUM_6 + < 3 NUM_0 &kp NUM_1 &kp NUM_2 &kp NUM_3 + >; + }; + + lower_layer { + bindings = < + &bt BT_CLR &none &reset &bootloader + &trans &bt BT_SEL 3 &bt BT_SEL 4 &none + &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 + >; + }; + + raise_layer { + bindings = < + &kp 0x68 &kp 0x69 &kp 0x6A &kp 0x6B + &kp 0x6C &kp 0x6D &kp 0x6E &kp 0x6F + &trans &kp 0x70 &kp 0x71 &kp 0x72 + >; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/boardsource3x4/boardsource3x4.overlay b/zmk/app/boards/shields/boardsource3x4/boardsource3x4.overlay new file mode 100644 index 00000000..ad517940 --- /dev/null +++ b/zmk/app/boards/shields/boardsource3x4/boardsource3x4.overlay @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + row-gpios + = <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + ; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/clueboard_california/Kconfig.defconfig b/zmk/app/boards/shields/clueboard_california/Kconfig.defconfig new file mode 100644 index 00000000..e101ea76 --- /dev/null +++ b/zmk/app/boards/shields/clueboard_california/Kconfig.defconfig @@ -0,0 +1,14 @@ + +if SHIELD_CLUEBOARD_CALIFORNIA + +config ZMK_KEYBOARD_NAME + default "Clueboard California Macropad" + +# Unable to use interrupts as the same pin number is used +# across A & B controllers, and STM32F303CCT6 can't enable +# interrutps for multiple controllers for the same "line" +# for the external interrupts. +config ZMK_KSCAN_DIRECT_POLLING + default y + +endif diff --git a/zmk/app/boards/shields/clueboard_california/Kconfig.shield b/zmk/app/boards/shields/clueboard_california/Kconfig.shield new file mode 100644 index 00000000..eca025d1 --- /dev/null +++ b/zmk/app/boards/shields/clueboard_california/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CLUEBOARD_CALIFORNIA + def_bool $(shields_list_contains,clueboard_california) diff --git a/zmk/app/boards/shields/clueboard_california/clueboard_california.conf b/zmk/app/boards/shields/clueboard_california/clueboard_california.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/clueboard_california/clueboard_california.keymap b/zmk/app/boards/shields/clueboard_california/clueboard_california.keymap new file mode 100644 index 00000000..44a0b076 --- /dev/null +++ b/zmk/app/boards/shields/clueboard_california/clueboard_california.keymap @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/ { + keymap0: keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp NUM_9 &kp NUM_8 + &kp NUM_7 &kp NUM_6 + &kp NUM_5 + &kp NUM_4 &kp NUM_3 + &kp NUM_2 &kp NUM_1 + &kp NUM_0 + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/clueboard_california/clueboard_california.overlay b/zmk/app/boards/shields/clueboard_california/clueboard_california.overlay new file mode 100644 index 00000000..9f52d0d3 --- /dev/null +++ b/zmk/app/boards/shields/clueboard_california/clueboard_california.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-direct"; + + label = "KSCAN"; + + input-gpios + = <&gpioa 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpioa 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&gpiob 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + + }; + + // TODO: Per-key LED node(s) +}; + diff --git a/zmk/app/boards/shields/clueboard_california/readme.md b/zmk/app/boards/shields/clueboard_california/readme.md new file mode 100644 index 00000000..0255eff7 --- /dev/null +++ b/zmk/app/boards/shields/clueboard_california/readme.md @@ -0,0 +1,24 @@ +# [Clueboard California Macropad](https://clueboard.co/parts/clueboard-california-macropad-kit) + +A small 10-key macropad in the shape of the US state of California. + +## Features + +- Per key LED. +- Proton-C only, including space for the piezo speaker. +- Direct GPIO wiring, no GPIO matrix at all. + +## Hardware Notes + +| Switch | Switch Pin | LED Pin | +| ------------ | ---------- | ------- | +| shasta1 | a10 | a2 | +| modoc1 | a9 | b5 | +| mendocino1 | a0 | a1 | +| lassen1 | b8 | b4 | +| eldorado1 | b11 | b12 | +| big_sur1 | b9 | b10 | +| sierra1 | a8 | a15 | +| los_padres1 | a7 | a6 | +| mojave1 | b1 | b0 | +| joshua_tree1 | b2 | b3 | diff --git a/zmk/app/boards/shields/corne/Kconfig.defconfig b/zmk/app/boards/shields/corne/Kconfig.defconfig new file mode 100644 index 00000000..8878da3d --- /dev/null +++ b/zmk/app/boards/shields/corne/Kconfig.defconfig @@ -0,0 +1,58 @@ + +if SHIELD_CORNE_LEFT + +config ZMK_KEYBOARD_NAME + default "Corne Left" + +endif + + +if SHIELD_CORNE_RIGHT + +config ZMK_KEYBOARD_NAME + default "Corne Right" + +endif + +if SHIELD_CORNE_LEFT || SHIELD_CORNE_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/zmk/app/boards/shields/corne/Kconfig.shield b/zmk/app/boards/shields/corne/Kconfig.shield new file mode 100644 index 00000000..3cac86fe --- /dev/null +++ b/zmk/app/boards/shields/corne/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_CORNE_LEFT + def_bool $(shields_list_contains,corne_left) + +config SHIELD_CORNE_RIGHT + def_bool $(shields_list_contains,corne_right) diff --git a/zmk/app/boards/shields/corne/boards/nice_nano.overlay b/zmk/app/boards/shields/corne/boards/nice_nano.overlay new file mode 100644 index 00000000..83ebae04 --- /dev/null +++ b/zmk/app/boards/shields/corne/boards/nice_nano.overlay @@ -0,0 +1,29 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "SK6812mini"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/corne/corne.conf b/zmk/app/boards/shields/corne/corne.conf new file mode 100644 index 00000000..974243c8 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne.conf @@ -0,0 +1,6 @@ +# Uncomment the following lines to enable the Corne RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y + +# Uncomment the following line to enable the Corne OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/zmk/app/boards/shields/corne/corne.dtsi b/zmk/app/boards/shields/corne/corne.dtsi new file mode 100644 index 00000000..4360aea7 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne.dtsi @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | +// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | +// | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | +// | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | +// | SW19 | SW20 | SW21 | | SW21 | SW20 | SW19 | + map = < +RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) +RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) +RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + // TODO: per-key RGB node(s)? +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/zmk/app/boards/shields/corne/corne.keymap b/zmk/app/boards/shields/corne/corne.keymap new file mode 100644 index 00000000..64d4a001 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne.keymap @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ----------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | SHFT | +// | GUI | LWR | SPC | | ENT | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP + &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp RALT + >; + }; + lower_layer { +// ----------------------------------------------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | BKSP | +// | BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | LFT | DWN | UP | RGT | | | +// | SHFT | | | | | | | | | | | | | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp BKSP + &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LARW &kp DARW &kp UARW &kp RARW &trans &trans + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT + >; + }; + + raise_layer { +// ----------------------------------------------------------------------------------------- +// | ESC | ! | @ | # | $ | % | | ^ | & | * | ( | ) | BKSP | +// | CTRL | | | | | | | - | = | { | } | "|" | ` | +// | SHFT | | | | | | | _ | + | [ | ] | \ | ~ | // TODO: Fix this row when &mkp is committed +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp ESC &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp BKSP + &kp LCTL &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE &kp GRAV + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILD + &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT + >; + }; + }; +}; + diff --git a/zmk/app/boards/shields/corne/corne_left.conf b/zmk/app/boards/shields/corne/corne_left.conf new file mode 100644 index 00000000..1e028a78 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/corne/corne_left.overlay b/zmk/app/boards/shields/corne/corne_left.overlay new file mode 100644 index 00000000..399bddd1 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/corne/corne_right.conf b/zmk/app/boards/shields/corne/corne_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/corne/corne_right.overlay b/zmk/app/boards/shields/corne/corne_right.overlay new file mode 100644 index 00000000..4250ac55 --- /dev/null +++ b/zmk/app/boards/shields/corne/corne_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "corne.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/cradio/Kconfig.defconfig b/zmk/app/boards/shields/cradio/Kconfig.defconfig new file mode 100644 index 00000000..4d200c95 --- /dev/null +++ b/zmk/app/boards/shields/cradio/Kconfig.defconfig @@ -0,0 +1,23 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_CRADIO_LEFT + +config ZMK_KEYBOARD_NAME + default "cradio left" + +endif + +if SHIELD_CRADIO_RIGHT + +config ZMK_KEYBOARD_NAME + default "cradio right" + +endif + +if SHIELD_CRADIO_RIGHT || SHIELD_CRADIO_LEFT + +config ZMK_KSCAN_DIRECT_POLLING + default y + +endif diff --git a/zmk/app/boards/shields/cradio/Kconfig.shield b/zmk/app/boards/shields/cradio/Kconfig.shield new file mode 100644 index 00000000..bb5f0735 --- /dev/null +++ b/zmk/app/boards/shields/cradio/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_CRADIO_LEFT + def_bool $(shields_list_contains,cradio_left) + +config SHIELD_CRADIO_RIGHT + def_bool $(shields_list_contains,cradio_right) diff --git a/zmk/app/boards/shields/cradio/cradio.dtsi b/zmk/app/boards/shields/cradio/cradio.dtsi new file mode 100644 index 00000000..43f90493 --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio.dtsi @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + #include + +/ { + chosen { + zmk,kscan = &kscan0; + //zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <34>; + rows = <1>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,21) RC(0,20) RC(0,19) RC(0,18) RC(0,17) + RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,26) RC(0,25) RC(0,24) RC(0,23) RC(0,22) + RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27) + RC(0,15) RC(0,16) RC(0,33) RC(0,32) + >; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + input-gpios + = <&pro_micro_d 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_a 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 5 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 6 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + }; + }; diff --git a/zmk/app/boards/shields/cradio/cradio.keymap b/zmk/app/boards/shields/cradio/cradio.keymap new file mode 100644 index 00000000..487f6dcf --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio.keymap @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH + &mo 1 &kp LCTL &kp SPC &mo 2 + >; + }; + upper_layer { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp H &kp J &kp K &kp L &kp SCLN + &kp LSFT &trans &trans &trans &trans &trans &trans &trans &trans &trans + &mo 1 &kp LCTL &kp SPC &mo 2 + >; + }; + + lower_layer { + bindings = < + &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILD + &mo 1 &kp LCTL &kp SPC &mo 2 + >; + }; + + }; +}; diff --git a/zmk/app/boards/shields/cradio/cradio_left.conf b/zmk/app/boards/shields/cradio/cradio_left.conf new file mode 100644 index 00000000..405f04db --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio_left.conf @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/cradio/cradio_left.overlay b/zmk/app/boards/shields/cradio/cradio_left.overlay new file mode 100644 index 00000000..6a3704a7 --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio_left.overlay @@ -0,0 +1,7 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "cradio.dtsi" diff --git a/zmk/app/boards/shields/cradio/cradio_right.conf b/zmk/app/boards/shields/cradio/cradio_right.conf new file mode 100644 index 00000000..bd2c93bf --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio_right.conf @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/cradio/cradio_right.overlay b/zmk/app/boards/shields/cradio/cradio_right.overlay new file mode 100644 index 00000000..01aa1ab6 --- /dev/null +++ b/zmk/app/boards/shields/cradio/cradio_right.overlay @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "cradio.dtsi" + +&default_transform { + col-offset = <17>; +}; diff --git a/zmk/app/boards/shields/iris/Kconfig.defconfig b/zmk/app/boards/shields/iris/Kconfig.defconfig new file mode 100644 index 00000000..6439780c --- /dev/null +++ b/zmk/app/boards/shields/iris/Kconfig.defconfig @@ -0,0 +1,16 @@ +# Copyright (c) 2020 Pete Johanson, Kurtis Lew +# SPDX-License-Identifier: MIT + +if SHIELD_IRIS_LEFT + +config ZMK_KEYBOARD_NAME + default "Iris Left" + +endif + +if SHIELD_IRIS_RIGHT + +config ZMK_KEYBOARD_NAME + default "Iris Right" + +endif diff --git a/zmk/app/boards/shields/iris/Kconfig.shield b/zmk/app/boards/shields/iris/Kconfig.shield new file mode 100644 index 00000000..370bd222 --- /dev/null +++ b/zmk/app/boards/shields/iris/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson, Kurtis Lew +# SPDX-License-Identifier: MIT + +config SHIELD_IRIS_LEFT + def_bool $(shields_list_contains,iris_left) + +config SHIELD_IRIS_RIGHT + def_bool $(shields_list_contains,iris_right) diff --git a/zmk/app/boards/shields/iris/iris.conf b/zmk/app/boards/shields/iris/iris.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/iris/iris.dtsi b/zmk/app/boards/shields/iris/iris.dtsi new file mode 100644 index 00000000..9ea1dd68 --- /dev/null +++ b/zmk/app/boards/shields/iris/iris.dtsi @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/iris/iris.keymap b/zmk/app/boards/shields/iris/iris.keymap new file mode 100644 index 00000000..8b06b1b7 --- /dev/null +++ b/zmk/app/boards/shields/iris/iris.keymap @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | GUI | LOWER| SPACE | | ENTER | RAISE| ALT | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp RALT + >; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &trans &trans &trans &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans + >; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/iris/iris_left.conf b/zmk/app/boards/shields/iris/iris_left.conf new file mode 100644 index 00000000..1e028a78 --- /dev/null +++ b/zmk/app/boards/shields/iris/iris_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/iris/iris_left.overlay b/zmk/app/boards/shields/iris/iris_left.overlay new file mode 100644 index 00000000..7ded678b --- /dev/null +++ b/zmk/app/boards/shields/iris/iris_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include "iris.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/iris/iris_right.conf b/zmk/app/boards/shields/iris/iris_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/iris/iris_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/iris/iris_right.overlay b/zmk/app/boards/shields/iris/iris_right.overlay new file mode 100644 index 00000000..51965821 --- /dev/null +++ b/zmk/app/boards/shields/iris/iris_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson, Kurtis Lew + * + * SPDX-License-Identifier: MIT + */ + +#include "iris.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/kyria/Kconfig.defconfig b/zmk/app/boards/shields/kyria/Kconfig.defconfig new file mode 100644 index 00000000..405377be --- /dev/null +++ b/zmk/app/boards/shields/kyria/Kconfig.defconfig @@ -0,0 +1,58 @@ + +if SHIELD_KYRIA_LEFT + +config ZMK_KEYBOARD_NAME + default "Kyria Left" + +endif + + +if SHIELD_KYRIA_RIGHT + +config ZMK_KEYBOARD_NAME + default "Kyria Right" + +endif + +if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 64 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/zmk/app/boards/shields/kyria/Kconfig.shield b/zmk/app/boards/shields/kyria/Kconfig.shield new file mode 100644 index 00000000..7dee0449 --- /dev/null +++ b/zmk/app/boards/shields/kyria/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_KYRIA_LEFT + def_bool $(shields_list_contains,kyria_left) + +config SHIELD_KYRIA_RIGHT + def_bool $(shields_list_contains,kyria_right) diff --git a/zmk/app/boards/shields/kyria/boards/nice_nano.overlay b/zmk/app/boards/shields/kyria/boards/nice_nano.overlay new file mode 100644 index 00000000..8be964b5 --- /dev/null +++ b/zmk/app/boards/shields/kyria/boards/nice_nano.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/kyria/boards/nrfmicro_11.overlay b/zmk/app/boards/shields/kyria/boards/nrfmicro_11.overlay new file mode 100644 index 00000000..b88573b6 --- /dev/null +++ b/zmk/app/boards/shields/kyria/boards/nrfmicro_11.overlay @@ -0,0 +1,29 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; + diff --git a/zmk/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay b/zmk/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay new file mode 100644 index 00000000..c6a24665 --- /dev/null +++ b/zmk/app/boards/shields/kyria/boards/nrfmicro_11_flipped.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/kyria/boards/nrfmicro_13.overlay b/zmk/app/boards/shields/kyria/boards/nrfmicro_13.overlay new file mode 100644 index 00000000..c6a24665 --- /dev/null +++ b/zmk/app/boards/shields/kyria/boards/nrfmicro_13.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <12>; // 0.12 is not broken out on the nRFMicro + miso-pin = <22>; // 0.22 is not broken out on the nRFMicro + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/kyria/kyria.conf b/zmk/app/boards/shields/kyria/kyria.conf new file mode 100644 index 00000000..7a0b5b6c --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria.conf @@ -0,0 +1,10 @@ +# Uncomment these two line to add support for encoders to your firmware +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Kyria OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/zmk/app/boards/shields/kyria/kyria.dtsi b/zmk/app/boards/shields/kyria/kyria.dtsi new file mode 100644 index 00000000..bbead846 --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria.dtsi @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | MX6 | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | +// | MX12 | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | +// | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | +// | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) RC(2,14) RC(2,15) + RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) + >; + }; + +// | MX5 | MX4 | MX3 | MX2 | MX1 | | MX1 | MX2 | MX3 | MX4 | MX5 | +// | MX11 | MX10 | MX9 | MX8 | MX7 | | MX7 | MX8 | MX9 | MX10 | MX11 | +// | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 | | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | +// | MX25 | MX24 | MX23 | MX22 | MX21 | | MX21 | MX22 | MX23 | MX24 | MX25 | + five_column_transform: keymap_transform_1 { + compatible = "zmk,matrix-transform"; + columns = <14>; + rows = <4>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13) + RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; + + // TODO: RGB node(s) +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <64>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <63>; + prechargep = <0x22>; + }; +}; diff --git a/zmk/app/boards/shields/kyria/kyria.keymap b/zmk/app/boards/shields/kyria/kyria.keymap new file mode 100644 index 00000000..a05f6cef --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria.keymap @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// --------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | L SHIFT | L SHIFT | | L SHIFT | L SHIFT | N | M | , | . | / | CTRL | +// | GUI | DEL | RET | SPACE | ESC | | RET | SPACE | TAB | BSPC | R-ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LSFT &kp LSFT &kp LSFT &kp LSFT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RCTL + &kp LGUI &kp DEL &kp RET &kp SPC &kp ESC &kp RET &kp SPC &kp TAB &kp BKSP &kp RALT + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + }; +}; diff --git a/zmk/app/boards/shields/kyria/kyria_left.conf b/zmk/app/boards/shields/kyria/kyria_left.conf new file mode 100644 index 00000000..e51dee44 --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/zmk/app/boards/shields/kyria/kyria_left.overlay b/zmk/app/boards/shields/kyria/kyria_left.overlay new file mode 100644 index 00000000..c8b5be27 --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria_left.overlay @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/zmk/app/boards/shields/kyria/kyria_right.conf b/zmk/app/boards/shields/kyria/kyria_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/kyria/kyria_right.overlay b/zmk/app/boards/shields/kyria/kyria_right.overlay new file mode 100644 index 00000000..8163c95e --- /dev/null +++ b/zmk/app/boards/shields/kyria/kyria_right.overlay @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "kyria.dtsi" + +&default_transform { + col-offset = <8>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; +}; + + +&right_encoder { + status = "okay"; +}; diff --git a/zmk/app/boards/shields/lily58/Kconfig.defconfig b/zmk/app/boards/shields/lily58/Kconfig.defconfig new file mode 100644 index 00000000..89f217be --- /dev/null +++ b/zmk/app/boards/shields/lily58/Kconfig.defconfig @@ -0,0 +1,54 @@ + +if SHIELD_LILY58_LEFT + +config ZMK_KEYBOARD_NAME + default "Lily58 Left" + +endif + +if SHIELD_LILY58_RIGHT + +config ZMK_KEYBOARD_NAME + default "Lily58 Right" + +endif + +if SHIELD_LILY58_LEFT || SHIELD_LILY58_RIGHT + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/zmk/app/boards/shields/lily58/Kconfig.shield b/zmk/app/boards/shields/lily58/Kconfig.shield new file mode 100644 index 00000000..932e33b3 --- /dev/null +++ b/zmk/app/boards/shields/lily58/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Pete Johanson +# SPDX-License-Identifier: MIT + +config SHIELD_LILY58_LEFT + def_bool $(shields_list_contains,lily58_left) + +config SHIELD_LILY58_RIGHT + def_bool $(shields_list_contains,lily58_right) diff --git a/zmk/app/boards/shields/lily58/lily58.conf b/zmk/app/boards/shields/lily58/lily58.conf new file mode 100644 index 00000000..31eb7c68 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58.conf @@ -0,0 +1,6 @@ +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +# Uncomment the following line to enable the Lily58 OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/zmk/app/boards/shields/lily58/lily58.dtsi b/zmk/app/boards/shields/lily58/lily58.dtsi new file mode 100644 index 00000000..eb69fa75 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58.dtsi @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/zmk/app/boards/shields/lily58/lily58.keymap b/zmk/app/boards/shields/lily58/lily58.keymap new file mode 100644 index 00000000..73ade143 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58.keymap @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | - | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | "[" | | "]" | N | M | , | . | / | SHIFT | +// | ALT | GUI | LOWER| SPACE | | ENTER | RAISE| BSPC | GUI | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp GRAV +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp MINUS +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp LBKT &kp RBKT &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LALT &kp LGUI &mo 1 &kp SPC &kp RET &mo 2 &kp BKSP &kp RGUI + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD>; + }; + + lower_layer { +// ------------------------------------------------------------------------------------------------------------ +// | BTCLR | BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | +// | ` | ! | @ | # | $ | % | | ^ | & | * | ( | ) | ~ | +// | | | | | | | | | | | _ | + | { | } | "|" | +// | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 +&kp GRAV &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp TILD +&trans &ext_power EP_ON &ext_power EP_OFF &ext_power EP_TOG &trans &trans &trans &trans &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// | | | | | | | | | | | | | | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | F1 | F2 | F3 | F4 | F5 | F6 | | | <- | ^ | v | -> | | +// | F7 | F8 | F9 | F10 | F11 | F12 | | | | + | - | = | [ | ] | \ | +// | | | | | | | | | | + bindings = < +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &trans +&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans +&kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &trans &kp KPLS &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD>; + }; + }; +}; diff --git a/zmk/app/boards/shields/lily58/lily58_left.conf b/zmk/app/boards/shields/lily58/lily58_left.conf new file mode 100644 index 00000000..6ff95d54 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58_left.conf @@ -0,0 +1,6 @@ +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/zmk/app/boards/shields/lily58/lily58_left.overlay b/zmk/app/boards/shields/lily58/lily58_left.overlay new file mode 100644 index 00000000..7397f188 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58_left.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "lily58.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/zmk/app/boards/shields/lily58/lily58_right.conf b/zmk/app/boards/shields/lily58/lily58_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/lily58/lily58_right.overlay b/zmk/app/boards/shields/lily58/lily58_right.overlay new file mode 100644 index 00000000..4fc460cf --- /dev/null +++ b/zmk/app/boards/shields/lily58/lily58_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +#include "lily58.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/m60/Kconfig.defconfig b/zmk/app/boards/shields/m60/Kconfig.defconfig new file mode 100644 index 00000000..e31d5a53 --- /dev/null +++ b/zmk/app/boards/shields/m60/Kconfig.defconfig @@ -0,0 +1,11 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +if SHIELD_M60 + +config ZMK_KEYBOARD_NAME + default "m60" + +endif diff --git a/zmk/app/boards/shields/m60/Kconfig.shield b/zmk/app/boards/shields/m60/Kconfig.shield new file mode 100644 index 00000000..47a28e24 --- /dev/null +++ b/zmk/app/boards/shields/m60/Kconfig.shield @@ -0,0 +1,7 @@ +# +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +config SHIELD_M60 + def_bool $(shields_list_contains,m60) diff --git a/zmk/app/boards/shields/m60/m60.conf b/zmk/app/boards/shields/m60/m60.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/m60/m60.keymap b/zmk/app/boards/shields/m60/m60.keymap new file mode 100644 index 00000000..cbe356c2 --- /dev/null +++ b/zmk/app/boards/shields/m60/m60.keymap @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap0: keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP | +// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | \ | +// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER | +// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | +// | CTL | WIN | ALT | SPACE | ALT | MO(1) | WIN | CTRL | +// ------------------------------------------------------------------------------------------ + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL &kp BKSP + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH + &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp RET + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LCTL &kp LGUI &kp LALT &kp SPC &kp RALT &mo 1 &kp RGUI &kp RCTL + >; + }; + + fn_layer { + bindings = < +&kp GRAV &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &bootloader +&trans &bt BT_CLR &none &none &none &none &none &none &none &none &none &none &none &reset +&trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp LARW &kp DARW &kp UARW &kp RARW &none &none &trans +&trans &none &none &none &none &none &none &none &none &none &none &trans +&trans &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/m60/m60.overlay b/zmk/app/boards/shields/m60/m60.overlay new file mode 100644 index 00000000..0824f1c6 --- /dev/null +++ b/zmk/app/boards/shields/m60/m60.overlay @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&gpio0 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio1 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&gpio0 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + col-gpios + = <&gpio0 19 GPIO_ACTIVE_HIGH> + , <&gpio0 20 GPIO_ACTIVE_HIGH> + , <&gpio0 21 GPIO_ACTIVE_HIGH> + , <&gpio0 22 GPIO_ACTIVE_HIGH> + , <&gpio0 23 GPIO_ACTIVE_HIGH> + , <&gpio0 24 GPIO_ACTIVE_HIGH> + , <&gpio0 25 GPIO_ACTIVE_HIGH> + , <&gpio0 26 GPIO_ACTIVE_HIGH> + ; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <8>; +// | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | MX13 | MX14 | +// | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | MX21 | MX22 | MX23 | MX24 | MX25 | MX26 | MX27 | MX28 | +// | MX29 | MX30 | MX31 | MX32 | MX33 | MX34 | MX35 | MX36 | MX37 | MX38 | MX39 | MX40 | MX41 | +// | MX42 | MX43 | MX44 | MX45 | MX46 | MX47 | MX48 | MX49 | MX50 | MX51 | MX52 | MX53 | +// | MX54 | MX55 | MX56 | MX57 | MX58 | MX59 | MX60 | MX61 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) +RC(3,3) RC(3,2) RC(3,1) RC(3,0) RC(2,7) RC(2,6) RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(1,7) RC(1,6) +RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(5,0) +RC(6,4) RC(6,3) RC(6,2) RC(6,1) RC(6,0) RC(5,7) RC(5,6) RC(5,5) RC(5,4) RC(5,3) RC(5,2) RC(5,1) +RC(6,5) RC(6,6) RC(6,7) RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,4) + >; + }; +}; + diff --git a/zmk/app/boards/shields/m60/readme.md b/zmk/app/boards/shields/m60/readme.md new file mode 100644 index 00000000..e801c788 --- /dev/null +++ b/zmk/app/boards/shields/m60/readme.md @@ -0,0 +1,14 @@ +# [Makerdiary M60](https://wiki.makerdiary.com/m60) + +A 60% ANSI keyboard designed and manufactured by Makerdiary. +http://makerdiary.com + +## Features + +- Per key RGB LED. +- Uses makerdiary M.2 nRF52840 module +- Matrix wiring + +## Hardware Notes + +https://wiki.makerdiary.com/m60/developer_guide/hardware/ diff --git a/zmk/app/boards/shields/microdox/Kconfig.defconfig b/zmk/app/boards/shields/microdox/Kconfig.defconfig new file mode 100644 index 00000000..4840eceb --- /dev/null +++ b/zmk/app/boards/shields/microdox/Kconfig.defconfig @@ -0,0 +1,60 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_MICRODOX_LEFT + +config ZMK_KEYBOARD_NAME + default "Microdox Left" + +endif + + +if SHIELD_MICRODOX_RIGHT + +config ZMK_KEYBOARD_NAME + default "Microdox Right" + +endif + +if SHIELD_MICRODOX_LEFT || SHIELD_MICRODOX_RIGHT + +config ZMK_SPLIT + default y + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/zmk/app/boards/shields/microdox/Kconfig.shield b/zmk/app/boards/shields/microdox/Kconfig.shield new file mode 100644 index 00000000..ac79eab6 --- /dev/null +++ b/zmk/app/boards/shields/microdox/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_MICRODOX_LEFT + def_bool $(shields_list_contains,microdox_left) + +config SHIELD_MICRODOX_RIGHT + def_bool $(shields_list_contains,microdox_right) diff --git a/zmk/app/boards/shields/microdox/boards/nice_nano.overlay b/zmk/app/boards/shields/microdox/boards/nice_nano.overlay new file mode 100644 index 00000000..1b84b6b5 --- /dev/null +++ b/zmk/app/boards/shields/microdox/boards/nice_nano.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +&spi1 { + compatible = "nordic,nrf-spim"; + /* Cannot be used together with i2c0. */ + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "SK6812mini"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <6>; /* There are per-key RGB, but the first 6 are underglow */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/microdox/microdox.conf b/zmk/app/boards/shields/microdox/microdox.conf new file mode 100644 index 00000000..0d38398c --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox.conf @@ -0,0 +1,6 @@ +# Uncomment the following lines to enable the Microdox RGB Underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y + +# Uncomment the following line to enable the Microdox OLED Display +# CONFIG_ZMK_DISPLAY=y diff --git a/zmk/app/boards/shields/microdox/microdox.dtsi b/zmk/app/boards/shields/microdox/microdox.dtsi new file mode 100644 index 00000000..55c67dd3 --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox.dtsi @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <10>; + rows = <4>; +// | SW1 | SW2 | SW3 | SW4 | SW5 | | SW5 | SW4 | SW3 | SW2 | SW1 | +// | SW6 | SW7 | SW8 | SW9 | SW10 | | SW10 | SW9 | SW8 | SW7 | SW6 | +// | SW11 | SW12 | SW13 | SW14 | SW15 | | SW15 | SW14 | SW13 | SW12 | SW11 | +// | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) + RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + + // TODO: per-key RGB node(s)? +}; + +&pro_micro_i2c { + status = "okay"; + + oled: ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/zmk/app/boards/shields/microdox/microdox.keymap b/zmk/app/boards/shields/microdox/microdox.keymap new file mode 100644 index 00000000..5747771b --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox.keymap @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ----------------------------------------------------------------------------------------- +// | Q | W | E | R | T | | Y | U | I | O | P | +// | A | S | D | F | G | | H | J | K | L | ; | +// | Z | X | C | V | B | | N | M | , | . | / | +// | GUI | NAV | SHFT | | SPC | SYM | ALT | + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH + &kp LGUI &mo 1 &kp LSFT &kp SPC &mo 2 &kp RALT + >; + }; + nav_layer { +// ----------------------------------------------------------------------------------------- +// |BTCLR| | ESC | ~ | | | TAB | HOME | UP | END | DEL | +// | BT1 | GUI | ALT | CTRL | NUM | | / | LEFT | DOWN | RGT | BKSP | +// | BT2 | | | | | | \ | ENT | | | | +// | | | | | | | | + bindings = < + &bt BT_CLR &trans &kp ESC &kp TILD &trans &kp TAB &kp HOME &kp UARW &kp END &kp DEL + &bt BT_SEL 0 &kp GUI &kp RALT &kp LCTL &mo 3 &kp FSLH &kp LARW &kp DARW &kp RARW &kp BKSP + &bt BT_SEL 1 &trans &trans &trans &trans &kp BSLH &kp RET &trans &trans &trans + &trans &trans &trans &trans &trans &trans + >; + }; + + sym_layer { +// ----------------------------------------------------------------------------------------- +// | ! | @ | # | $ | % | | ^ | & | * | ( | ) | +// | | | | | | | - | = | { | } | "|" | +// | | | | | | | _ | + | [ | ] | \ | +// | GUI | | SPC | | ENT | | ALT | + bindings = < + &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN + &trans &trans &trans &trans &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp PIPE + &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH + &kp LGUI &trans &kp SPC &kp RET &trans &kp RALT + >; + }; + +// This layer is unreachable until "tri layer state" is sorted out. +// Leaving it here for completeness. + num_layer { +// ----------------------------------------------------------------------------------------- +// | | | | | | | A | 7 | 8 | 9 | D | +// | | | | | | | B | 4 | 5 | 6 | E | +// | | | | | | | C | 1 | 2 | 3 | F | +// | | | | | 0 | . | | + bindings = < + &trans &trans &trans &trans &trans &kp A &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp D + &trans &trans &trans &trans &trans &kp B &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp E + &trans &trans &trans &trans &trans &kp C &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp F + &trans &trans &trans &kp NUM_0 &kp DOT &trans + >; + }; + }; +}; + diff --git a/zmk/app/boards/shields/microdox/microdox_left.conf b/zmk/app/boards/shields/microdox/microdox_left.conf new file mode 100644 index 00000000..1e028a78 --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/microdox/microdox_left.overlay b/zmk/app/boards/shields/microdox/microdox_left.overlay new file mode 100644 index 00000000..4d0378e5 --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox_left.overlay @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "microdox.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/microdox/microdox_right.conf b/zmk/app/boards/shields/microdox/microdox_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/microdox/microdox_right.overlay b/zmk/app/boards/shields/microdox/microdox_right.overlay new file mode 100644 index 00000000..c5622b25 --- /dev/null +++ b/zmk/app/boards/shields/microdox/microdox_right.overlay @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "microdox.dtsi" + +&default_transform { + col-offset = <5>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; +}; diff --git a/zmk/app/boards/shields/nibble/Kconfig.defconfig b/zmk/app/boards/shields/nibble/Kconfig.defconfig new file mode 100644 index 00000000..01d0bba5 --- /dev/null +++ b/zmk/app/boards/shields/nibble/Kconfig.defconfig @@ -0,0 +1,13 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_NIBBLE + +config ZMK_KEYBOARD_NAME + default "NIBBLE" + +config ZMK_USB + default y + +endif + diff --git a/zmk/app/boards/shields/nibble/Kconfig.shield b/zmk/app/boards/shields/nibble/Kconfig.shield new file mode 100644 index 00000000..44364f4e --- /dev/null +++ b/zmk/app/boards/shields/nibble/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_NIBBLE + def_bool $(shields_list_contains,nibble) diff --git a/zmk/app/boards/shields/nibble/nibble.conf b/zmk/app/boards/shields/nibble/nibble.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/nibble/nibble.keymap b/zmk/app/boards/shields/nibble/nibble.keymap new file mode 100644 index 00000000..f88d9144 --- /dev/null +++ b/zmk/app/boards/shields/nibble/nibble.keymap @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define FUNC 1 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL &kp BKSP &kp HOME +&kp M_VOLU &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp DEL +&kp M_VOLD &kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp RET &kp PGUP +&trans &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT &kp UARW &kp PGDN +&trans &kp LCTL &kp LGUI &kp LALT &kp SPC &mo FUNC &kp RALT &kp RCTL &kp LARW &kp DARW &kp RARW + >; + }; + func { + bindings = < + &kp TILD &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &kp END +&bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &bootloader +&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&bt BT_PRV &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans +&bt BT_NXT &trans &trans &trans &trans &trans &trans &trans &kp M_PREV &kp M_PLAY &kp M_NEXT + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/nibble/nibble.overlay b/zmk/app/boards/shields/nibble/nibble.overlay new file mode 100644 index 00000000..7975c3cd --- /dev/null +++ b/zmk/app/boards/shields/nibble/nibble.overlay @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-demux"; + label = "KSCAN"; + polling-interval-msec = <25>; + input-gpios + = <&pro_micro_d 15 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 14 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 16 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + , <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + output-gpios + = <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + ; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <5>; + + //TODO: Add a keymap graphic here + + map = < + RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,15) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(1,15) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,15) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,14) RC(3,15) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,6) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,14) RC(4,15) + >; + }; +}; diff --git a/zmk/app/boards/shields/qaz/Kconfig.defconfig b/zmk/app/boards/shields/qaz/Kconfig.defconfig new file mode 100644 index 00000000..c84180bf --- /dev/null +++ b/zmk/app/boards/shields/qaz/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_QAZ + +config ZMK_KEYBOARD_NAME + default "QAZ" + +endif \ No newline at end of file diff --git a/zmk/app/boards/shields/qaz/Kconfig.shield b/zmk/app/boards/shields/qaz/Kconfig.shield new file mode 100644 index 00000000..7cc8f1e4 --- /dev/null +++ b/zmk/app/boards/shields/qaz/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_QAZ + def_bool $(shields_list_contains,qaz) diff --git a/zmk/app/boards/shields/qaz/qaz.conf b/zmk/app/boards/shields/qaz/qaz.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/qaz/qaz.keymap b/zmk/app/boards/shields/qaz/qaz.keymap new file mode 100644 index 00000000..36229727 --- /dev/null +++ b/zmk/app/boards/shields/qaz/qaz.keymap @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define NUM_SYM 1 +#define NAV 2 + +/ { + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "homerow mods"; + #binding-cells = <2>; + tapping_term_ms = <225>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P + &hm LGUI A &hm LALT S &hm LCTL D &hm LSFT F &kp G &kp H &hm RSFT J &hm RCTL K &hm RALT L &hm RGUI RET + &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT + &kp LSFT &kp LGUI &kp LALT < NAV RET < NUM_SYM SPC &kp COLN &kp QUOT &kp FSLH + >; + }; + num_sym { + bindings = < + &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 + &trans &trans &trans &trans &trans &trans &trans &trans &kp EQL &kp MINUS + &kp DEL &none &none &none &none &none &none &none &kp DOT + &bootloader &reset &none &trans &trans &kp RET &trans &kp FSLH + >; + }; + + nav { + bindings = < + &bt BT_CLR &bt BT_NXT &bt BT_PRV &none &none &none &none &kp UARW &none &kp BKSP + &trans &trans &trans &trans &none &none &kp LARW &kp DARW &kp RARW &none + &none &none &none &none &none &none &none &none &none + &none &none &none &trans &trans &kp RET &trans &kp FSLH + >; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/qaz/qaz.overlay b/zmk/app/boards/shields/qaz/qaz.overlay new file mode 100644 index 00000000..4e733707 --- /dev/null +++ b/zmk/app/boards/shields/qaz/qaz.overlay @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <6>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(4,3) RC(5,3) + RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(4,4) + >; + }; + + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 8 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/quefrency/Kconfig.defconfig b/zmk/app/boards/shields/quefrency/Kconfig.defconfig new file mode 100644 index 00000000..2b00cb62 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/Kconfig.defconfig @@ -0,0 +1,17 @@ +#Copyright (c) 2020 The ZMK Contributors +#SPDX-License-Identifier: MIT + + +if SHIELD_QUEFRENCY_LEFT + +config ZMK_KEYBOARD_NAME + default "Quefrency Left" + +endif + +if SHIELD_QUEFRENCY_RIGHT + +config ZMK_KEYBOARD_NAME + default "Quefrency Right" + +endif diff --git a/zmk/app/boards/shields/quefrency/Kconfig.shield b/zmk/app/boards/shields/quefrency/Kconfig.shield new file mode 100644 index 00000000..d205e58f --- /dev/null +++ b/zmk/app/boards/shields/quefrency/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_QUEFRENCY_LEFT + def_bool $(shields_list_contains,quefrency_left) + +config SHIELD_QUEFRENCY_RIGHT + def_bool $(shields_list_contains,quefrency_right) diff --git a/zmk/app/boards/shields/quefrency/quefrency.conf b/zmk/app/boards/shields/quefrency/quefrency.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/quefrency/quefrency.dtsi b/zmk/app/boards/shields/quefrency/quefrency.dtsi new file mode 100644 index 00000000..5f1e9086 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency.dtsi @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + + zmk,matrix_transform = &default_transform; + }; + + /* + * This transform correspondsto the 60% left without macro keypad and 65% right, even this + * combination of PCBs can have keys in different locations based on configuration. + */ + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <15>; + rows = <6>; + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) /**/ RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,14) RC(5,13) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) /**/RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13) RC(1,14) RC(5,14) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,14) RC(2,13) +RC(3,0) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) /**/ RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,12) RC(3,13) RC(3,14) RC(3,11) +RC(4,0) RC(4,1) RC(4,2) RC(4,4) RC(4,6) /**/ RC(4,7) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14) RC(4,9) + >; + }; +}; diff --git a/zmk/app/boards/shields/quefrency/quefrency.keymap b/zmk/app/boards/shields/quefrency/quefrency.keymap new file mode 100644 index 00000000..21c5ed40 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency.keymap @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + +// ---------------------------------------------- ----------------------------------------------------- +// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BKSPC | ` | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | [ | ] | \ | DEL | +// | LCTRL | A | S | D | F | G | | H | J | K | L | ; | ' | ENTER | PGUP | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | RSHFT | UP | PGDN | +// | LCTRL | LGUI | LALT | SPACE | FN | | SPACE | RALT | FN | RCTRL | LFT | DWN | RGHT | +// ------------------------------------------- ------------------------------------------------------ + + default_layer { + bindings = < + &kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 /**/ &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS &kp EQL &kp BKSP &kp GRAV + &kp TAB &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH &kp HOME + &kp LCTL &kp A &kp S &kp D &kp F &kp G /**/ &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT &kp RET &kp PGUP + &kp LSFT &kp Z &kp X &kp C &kp V &kp B /**/ &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT &kp UARW &kp PGDN + &kp LCTL &kp LGUI &kp LALT &kp SPC &mo 1 /**/ &kp SPC &kp RALT &mo 1 &kp RCTL &kp LARW &kp DARW &kp RARW + >; + }; + +// ---------------------------------------------- ----------------------------------------------------- +// |BT_CLR| F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | |BT_CLR| +// | | BT-0 | BT-1| BT-2 | | | | | | | | | | | | | +// | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | | | | +// | | | | | | | | | | | | | | +// ------------------------------------------- ------------------------------------------------------ + + fn_layer { + bindings = < + &bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &bt BT_CLR + &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans /**/ &trans &trans &trans &trans &trans &trans &trans + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/quefrency/quefrency_left.conf b/zmk/app/boards/shields/quefrency/quefrency_left.conf new file mode 100644 index 00000000..1e028a78 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/quefrency/quefrency_left.overlay b/zmk/app/boards/shields/quefrency/quefrency_left.overlay new file mode 100644 index 00000000..a385cc58 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency_left.overlay @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "quefrency.dtsi" + +/ { + /* This kscan is for the 60% left half without macro keys the + * macro pad layout may require different column and row pins + */ + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + + col-gpios + = <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/zmk/app/boards/shields/quefrency/quefrency_right.conf b/zmk/app/boards/shields/quefrency/quefrency_right.conf new file mode 100644 index 00000000..990cf7c0 --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/quefrency/quefrency_right.overlay b/zmk/app/boards/shields/quefrency/quefrency_right.overlay new file mode 100644 index 00000000..53e0f77c --- /dev/null +++ b/zmk/app/boards/shields/quefrency/quefrency_right.overlay @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "quefrency.dtsi" + +&default_transform { + col-offset = <7>; +}; + +/ { + + /* This kscan is for the 65% right half the 60% right half + * may require different column and row pins + */ + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + + + col-gpios + = <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/zmk/app/boards/shields/reviung41/Kconfig.defconfig b/zmk/app/boards/shields/reviung41/Kconfig.defconfig new file mode 100644 index 00000000..0625cb21 --- /dev/null +++ b/zmk/app/boards/shields/reviung41/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_REVIUNG41 + +config ZMK_KEYBOARD_NAME + default "Reviung41" + +endif diff --git a/zmk/app/boards/shields/reviung41/Kconfig.shield b/zmk/app/boards/shields/reviung41/Kconfig.shield new file mode 100644 index 00000000..e51f9e64 --- /dev/null +++ b/zmk/app/boards/shields/reviung41/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_REVIUNG41 + def_bool $(shields_list_contains,reviung41) diff --git a/zmk/app/boards/shields/reviung41/boards/nice_nano.overlay b/zmk/app/boards/shields/reviung41/boards/nice_nano.overlay new file mode 100644 index 00000000..b6c89e80 --- /dev/null +++ b/zmk/app/boards/shields/reviung41/boards/nice_nano.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <11>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; diff --git a/zmk/app/boards/shields/reviung41/reviung41.conf b/zmk/app/boards/shields/reviung41/reviung41.conf new file mode 100644 index 00000000..289f070b --- /dev/null +++ b/zmk/app/boards/shields/reviung41/reviung41.conf @@ -0,0 +1,3 @@ +# Uncomment the following lines to enable RGB underglow +# CONFIG_ZMK_RGB_UNDERGLOW=y +# CONFIG_WS2812_STRIP=y diff --git a/zmk/app/boards/shields/reviung41/reviung41.keymap b/zmk/app/boards/shields/reviung41/reviung41.keymap new file mode 100644 index 00000000..26b40935 --- /dev/null +++ b/zmk/app/boards/shields/reviung41/reviung41.keymap @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------- +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | BKSP | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHFT | Z | X | C | V | B | | N | M | , | . | / | SHFT(RET) | +// | ALT | LWR | SPC | RSE | ALT | + bindings = < + &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP + &kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &mt RSFT RET + &kp LALT &mo 1 &kp SPC &mo 2 &kp RALT + >; + }; + + lower_layer { +// ---------------------------------------------------------------------------------- +// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | DEL | +// | | _ | + | { | } | "|" | | LFT | DWN | UP | RGT | ` | ~ | +// | | ESC | GUI | ALT | CAPS| " | | HOME| END | PGUP| PGDN| PRSC| SHFT(RET) | +// | | | RET | ADJ | | + bindings = < + &trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp NUM_8 &kp LPRN &kp RPRN &kp DEL + &trans &kp MINUS &kp KPLS &kp LCUR &kp RCUR &kp PIPE &kp LARW &kp DARW &kp UARW &kp RARW &kp GRAV &kp GRAV + &trans &kp ESC &kp LGUI &kp LALT &kp CLCK &kp QUOT &kp HOME &kp END &kp PGUP &kp PGDN &kp PRSC &mt RSFT RET + &trans &trans &kp RET &mo 3 &trans + >; + }; + + raise_layer { +// ----------------------------------------------------------------------------------------- +// | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | DEL | +// | | - | = | [ | ] | \ | | F1 | F2 | F3 | F4 | F5 | F6 | +// | | ESC | GUI | ALT | CAPS| " | | F7 | F8 | F9 | F10 | F11 | F12 | +// | | ADJ | BKSP | | | + bindings = < + &trans &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp DEL + &trans &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 + &trans &kp ESC &kp LGUI &kp RALT &kp CLCK &kp QUOT &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 + &trans &mo 3 &kp BKSP &trans &trans + >; + }; + + adjust_layer { +// ----------------------------------------------------------------------------------------- +// | RGB BRI+ | RGB SAT+ | RGB HUE+ | RGB ANI+ | | RGB TOG | | BT1 | BT2 | BT3 | BT4 | BT5 | BT CLR | +// | RGB BRI- | RGB SAT- | RGB HUE- | RGB ANI+ | | | | | | | | | | +// | | | | | | | | RESET | | | | | | +// | | | | | | + bindings = < + &rgb_ug RGB_BRI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_EFF &none &rgb_ug RGB_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_CLR + &rgb_ug RGB_BRD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_EFR &none &none &none &none &none &none &none &none + &none &none &none &none &none &none &reset &none &none &none &none &none + &trans &trans &tog 3 &trans &trans + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/reviung41/reviung41.overlay b/zmk/app/boards/shields/reviung41/reviung41.overlay new file mode 100644 index 00000000..06270ca1 --- /dev/null +++ b/zmk/app/boards/shields/reviung41/reviung41.overlay @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <6>; + rows = <7>; + + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(5,5) + RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) + >; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 4 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 7 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 8 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 9 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; diff --git a/zmk/app/boards/shields/romac/Kconfig.defconfig b/zmk/app/boards/shields/romac/Kconfig.defconfig new file mode 100644 index 00000000..53527971 --- /dev/null +++ b/zmk/app/boards/shields/romac/Kconfig.defconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2020 Pete Johanson, Richard Jones +# SPDX-License-Identifier: MIT + +if SHIELD_ROMAC + +config ZMK_KEYBOARD_NAME + default "RoMac" + +endif + diff --git a/zmk/app/boards/shields/romac/Kconfig.shield b/zmk/app/boards/shields/romac/Kconfig.shield new file mode 100644 index 00000000..59669d33 --- /dev/null +++ b/zmk/app/boards/shields/romac/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Pete Johanson, Richard Jones +# SPDX-License-Identifier: MIT + +config SHIELD_ROMAC + def_bool $(shields_list_contains,romac) diff --git a/zmk/app/boards/shields/romac/romac.conf b/zmk/app/boards/shields/romac/romac.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/romac/romac.keymap b/zmk/app/boards/shields/romac/romac.keymap new file mode 100644 index 00000000..31e1ce82 --- /dev/null +++ b/zmk/app/boards/shields/romac/romac.keymap @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------- +// | 7 | 8 | 9 | +// | 4 | 5 | 6 | +// | 1 | 2 | 3 | +// | MO(1) | 0 | . | +// ---------------------- + bindings = < + &kp NUM_7 &kp NUM_8 &kp NUM_9 + &kp NUM_4 &kp NUM_5 &kp NUM_6 + &kp NUM_1 &kp NUM_2 &kp NUM_3 + &mo 1 &kp NUM_0 &kp DOT + >; + }; + + nav_layer { +// ----------------------- +// | BTNXT | HOME | PGUP | +// | BTPRV | END | PGDN | +// | BTCLR | _ | _ | +// | _ | _ | RET | +// ----------------------- + bindings = < + &bt BT_NXT &kp HOME &kp PGUP + &bt BT_PRV &kp END &kp PGDN + &bt BT_CLR &trans &trans + &trans &trans &kp RET + >; + }; + }; +}; + + diff --git a/zmk/app/boards/shields/romac/romac.overlay b/zmk/app/boards/shields/romac/romac.overlay new file mode 100644 index 00000000..f6b0f726 --- /dev/null +++ b/zmk/app/boards/shields/romac/romac.overlay @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020 Pete Johanson, Richard Jones + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + col-gpios + = <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + ; + + }; +}; + diff --git a/zmk/app/boards/shields/romac_plus/Kconfig.defconfig b/zmk/app/boards/shields/romac_plus/Kconfig.defconfig new file mode 100644 index 00000000..c4efdb97 --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_ROMAC_PLUS + +config ZMK_KEYBOARD_NAME + default "RoMac+ v4" + +endif \ No newline at end of file diff --git a/zmk/app/boards/shields/romac_plus/Kconfig.shield b/zmk/app/boards/shields/romac_plus/Kconfig.shield new file mode 100644 index 00000000..a7c7c614 --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_ROMAC_PLUS + def_bool $(shields_list_contains,romac_plus) diff --git a/zmk/app/boards/shields/romac_plus/boards/nice_nano.overlay b/zmk/app/boards/shields/romac_plus/boards/nice_nano.overlay new file mode 100644 index 00000000..940abc0c --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/boards/nice_nano.overlay @@ -0,0 +1,28 @@ +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* arbitrary; change at will */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; + +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/romac_plus/romac_plus.conf b/zmk/app/boards/shields/romac_plus/romac_plus.conf new file mode 100644 index 00000000..899d448f --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/romac_plus.conf @@ -0,0 +1,6 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +# Uncomment to enable encoder +#CONFIG_EC11=y +#CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y \ No newline at end of file diff --git a/zmk/app/boards/shields/romac_plus/romac_plus.dtsi b/zmk/app/boards/shields/romac_plus/romac_plus.dtsi new file mode 100644 index 00000000..ba7844b8 --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/romac_plus.dtsi @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <3>; + rows = <4>; + + map = < +RC(0,0) RC(0,1) RC(0,2) +RC(1,0) RC(1,1) RC(1,2) +RC(2,0) RC(2,1) RC(2,2) +RC(3,0) RC(3,1) RC(3,2) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder>; + }; + + // TODO: per-key RGB node(s)? +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/romac_plus/romac_plus.keymap b/zmk/app/boards/shields/romac_plus/romac_plus.keymap new file mode 100644 index 00000000..2c1929da --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/romac_plus.keymap @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// -------------------------- +// | 7 | 8 | 9 | +// | 4 | 5 | 6 | +// | 1 | 2 | 3 | +// | M_PLAY | 0 | MO(1) | +// -------------------------- + bindings = < + &kp NUM_7 &kp NUM_8 &kp NUM_9 + &kp NUM_4 &kp NUM_5 &kp NUM_6 + &kp NUM_1 &kp NUM_2 &kp NUM_3 + &kp M_PLAY &kp NUM_0 &mo 1 + >; + + sensor-bindings = <&inc_dec_kp M_NEXT M_PREV>; + }; + + nav_layer { +// -------------------------- +// | BT_CLR | HOME | PGUP | +// | _ | END | PGDN | +// | _ | _ | _ | +// | _ | _ | _ | +// -------------------------- + bindings = < + &bt BT_CLR &kp HOME &kp PGUP + &trans &kp END &kp PGDN + &trans &trans &trans + &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp A B>; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/romac_plus/romac_plus.overlay b/zmk/app/boards/shields/romac_plus/romac_plus.overlay new file mode 100644 index 00000000..86430349 --- /dev/null +++ b/zmk/app/boards/shields/romac_plus/romac_plus.overlay @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include "romac_plus.dtsi" + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; + }; + +}; + +&left_encoder { + status = "okay"; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/settings_reset/Kconfig.defconfig b/zmk/app/boards/shields/settings_reset/Kconfig.defconfig new file mode 100644 index 00000000..6d050cb4 --- /dev/null +++ b/zmk/app/boards/shields/settings_reset/Kconfig.defconfig @@ -0,0 +1,10 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_SETTINGS_RESET + +config ZMK_KEYBOARD_NAME + default "SETTINGS RESET" + +endif + diff --git a/zmk/app/boards/shields/settings_reset/Kconfig.shield b/zmk/app/boards/shields/settings_reset/Kconfig.shield new file mode 100644 index 00000000..b5ce97f9 --- /dev/null +++ b/zmk/app/boards/shields/settings_reset/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_SETTINGS_RESET + def_bool $(shields_list_contains,settings_reset) diff --git a/zmk/app/boards/shields/settings_reset/settings_reset.conf b/zmk/app/boards/shields/settings_reset/settings_reset.conf new file mode 100644 index 00000000..8052a6cf --- /dev/null +++ b/zmk/app/boards/shields/settings_reset/settings_reset.conf @@ -0,0 +1 @@ +CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START=y diff --git a/zmk/app/boards/shields/settings_reset/settings_reset.keymap b/zmk/app/boards/shields/settings_reset/settings_reset.keymap new file mode 100644 index 00000000..05236445 --- /dev/null +++ b/zmk/app/boards/shields/settings_reset/settings_reset.keymap @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &reset + >; + }; + }; +}; + + diff --git a/zmk/app/boards/shields/settings_reset/settings_reset.overlay b/zmk/app/boards/shields/settings_reset/settings_reset.overlay new file mode 100644 index 00000000..a2b5799b --- /dev/null +++ b/zmk/app/boards/shields/settings_reset/settings_reset.overlay @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-direct"; + label = "KSCAN"; + + input-gpios + = <&pro_micro_d 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> + ; + }; + +}; + diff --git a/zmk/app/boards/shields/sofle/Kconfig.defconfig b/zmk/app/boards/shields/sofle/Kconfig.defconfig new file mode 100644 index 00000000..58d82176 --- /dev/null +++ b/zmk/app/boards/shields/sofle/Kconfig.defconfig @@ -0,0 +1,54 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + +if SHIELD_SOFLE_LEFT + +config ZMK_KEYBOARD_NAME + default "Sofle Left" +endif + +if SHIELD_SOFLE_RIGHT + +config ZMK_KEYBOARD_NAME + default "Sofle Right" +endif + +if SHIELD_SOFLE_LEFT || SHIELD_SOFLE_RIGHT + +if ZMK_DISPLAY + +config I2C + default y + +config SSD1306 + default y + +config SSD1306_REVERSE_MODE + default y + +endif # ZMK_DISPLAY + +if LVGL + +config LVGL_HOR_RES + default 128 + +config LVGL_VER_RES + default 32 + +config LVGL_VDB_SIZE + default 64 + +config LVGL_DPI + default 148 + +config LVGL_BITS_PER_PIXEL + default 1 + +choice LVGL_COLOR_DEPTH + default LVGL_COLOR_DEPTH_1 +endchoice + +endif # LVGL + +endif diff --git a/zmk/app/boards/shields/sofle/Kconfig.shield b/zmk/app/boards/shields/sofle/Kconfig.shield new file mode 100644 index 00000000..e23a97a1 --- /dev/null +++ b/zmk/app/boards/shields/sofle/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + +config SHIELD_SOFLE_LEFT + def_bool $(shields_list_contains,sofle_left) + +config SHIELD_SOFLE_RIGHT + def_bool $(shields_list_contains,sofle_right) diff --git a/zmk/app/boards/shields/sofle/sofle.conf b/zmk/app/boards/shields/sofle/sofle.conf new file mode 100644 index 00000000..fe3f0f4f --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle.conf @@ -0,0 +1,9 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + +# Uncomment the following line to enable the Sofle OLED Display +# CONFIG_ZMK_DISPLAY=y + +# Uncomment these two lines to add support for encoders +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y diff --git a/zmk/app/boards/shields/sofle/sofle.dtsi b/zmk/app/boards/shields/sofle/sofle.dtsi new file mode 100644 index 00000000..b4edb5f6 --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle.dtsi @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2020 Pete Johanson, Ryan Cross + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW30 | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | SW30 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; + + left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + right_encoder: encoder_right { + compatible = "alps,ec11"; + label = "RIGHT_ENCODER"; + a-gpios = <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + b-gpios = <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; + resolution = <4>; + status = "disabled"; + }; + + sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +}; + +&pro_micro_i2c { + status = "okay"; + + ssd1306@3c { + compatible = "solomon,ssd1306fb"; + reg = <0x3c>; + label = "DISPLAY"; + width = <128>; + height = <32>; + segment-offset = <0>; + page-offset = <0>; + display-offset = <0>; + multiplex-ratio = <31>; + segment-remap; + com-invdir; + com-sequential; + prechargep = <0x22>; + }; +}; diff --git a/zmk/app/boards/shields/sofle/sofle.keymap b/zmk/app/boards/shields/sofle/sofle.keymap new file mode 100644 index 00000000..0bebb781 --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle.keymap @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | BKSPC | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | MUTE | | | N | M | , | . | / | SHIFT | +// | GUI | ALT | CTRL | LOWER| ENTER | | SPACE | RAISE| CTRL | ALT | GUI | + bindings = < +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &none +&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP +&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp M_MUTE &none &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT + &kp LGUI &kp LALT &kp LCTL &mo 1 &kp RET &kp SPC &mo 2 &kp RCTL &kp RALT &kp RGUI + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + + lower_layer { +// TODO: Some binds are waiting for shifted keycode support. +// ------------------------------------------------------------------------------------------------------------ +// | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | +// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | +// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | +// | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | +// | | | | | | | | | | | | + bindings = < +&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 +&kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp F12 +&trans &kp BANG &kp ATSN &kp HASH &kp CURU &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN &kp PIPE +&trans &kp EQL &kp MINUS &kp KPLS &kp LCUR &kp RCUR &trans &trans &kp LBKT &kp RBKT &kp SCLN &kp COLN &kp BSLH &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + + raise_layer { +// ------------------------------------------------------------------------------------------------------------ +// |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | +// | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | +// | | ALT | CTRL | SHIFT | | CAPS | | PGDN | <- | v | -> | DEL | BKSPC | +// | | UNDO | CUT | COPY | PASTE | | | | | | | | | | | +// | | | | | | | | | | | | + bindings = < +&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans +&trans &kp INS &kp PRSC &kp GUI &trans &trans &kp PGUP &trans &kp UARW &trans &kp NUM_0 &trans +&trans &kp LALT &kp LCTL &kp LSFT &trans &kp CLCK &kp PGDN &kp LARW &kp DARW &kp RARW &kp DEL &kp BKSP +&trans &kp UNDO &kp CUT &kp COPY &kp PSTE &trans &trans &trans &trans &trans &trans &trans &trans &trans + &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans + >; + + sensor-bindings = <&inc_dec_kp M_VOLU M_VOLD &inc_dec_kp PGUP PGDN>; + }; + }; +}; diff --git a/zmk/app/boards/shields/sofle/sofle_left.conf b/zmk/app/boards/shields/sofle/sofle_left.conf new file mode 100644 index 00000000..bbac7359 --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle_left.conf @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y diff --git a/zmk/app/boards/shields/sofle/sofle_left.overlay b/zmk/app/boards/shields/sofle/sofle_left.overlay new file mode 100644 index 00000000..eb2bfeda --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle_left.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Ryan Cross + * + * SPDX-License-Identifier: MIT + */ + +#include "sofle.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + ; +}; + +&left_encoder { + status = "okay"; +}; diff --git a/zmk/app/boards/shields/sofle/sofle_right.conf b/zmk/app/boards/shields/sofle/sofle_right.conf new file mode 100644 index 00000000..ca5de382 --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle_right.conf @@ -0,0 +1,5 @@ +# Copyright (c) 2020 Ryan Cross +# SPDX-License-Identifier: MIT + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y diff --git a/zmk/app/boards/shields/sofle/sofle_right.overlay b/zmk/app/boards/shields/sofle/sofle_right.overlay new file mode 100644 index 00000000..c35cf52c --- /dev/null +++ b/zmk/app/boards/shields/sofle/sofle_right.overlay @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 Ryan Cross + * + * SPDX-License-Identifier: MIT + */ + +#include "sofle.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + ; +}; + +&right_encoder { + status = "okay"; +}; diff --git a/zmk/app/boards/shields/splitreus62/Kconfig.defconfig b/zmk/app/boards/shields/splitreus62/Kconfig.defconfig new file mode 100644 index 00000000..a2464a79 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/Kconfig.defconfig @@ -0,0 +1,22 @@ + +#Copyright (c) 2020 Derek Schmell +#SPDX-License-Identifier: MIT + + +if SHIELD_SPLITREUS62_LEFT + +config ZMK_KEYBOARD_NAME + default "Splitreus62 Left" + +endif + +if SHIELD_SPLITREUS62_RIGHT + +config ZMK_KEYBOARD_NAME + default "Splitreus62 Right" + +endif + +if SHIELD_SPLITREUS62_LEFT || SHIELD_SPLITREUS62_RIGHT + +endif diff --git a/zmk/app/boards/shields/splitreus62/Kconfig.shield b/zmk/app/boards/shields/splitreus62/Kconfig.shield new file mode 100644 index 00000000..762d991b --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/Kconfig.shield @@ -0,0 +1,8 @@ +# Copyright (c) 2020 Derek Schmell +# SPDX-License-Identifier: MIT + +config SHIELD_SPLITREUS62_LEFT + def_bool $(shields_list_contains,splitreus62_left) + +config SHIELD_SPLITREUS62_RIGHT + def_bool $(shields_list_contains,splitreus62_right) diff --git a/zmk/app/boards/shields/splitreus62/splitreus62.conf b/zmk/app/boards/shields/splitreus62/splitreus62.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/boards/shields/splitreus62/splitreus62.dtsi b/zmk/app/boards/shields/splitreus62/splitreus62.dtsi new file mode 100644 index 00000000..c2bfbc40 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62.dtsi @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <12>; + rows = <6>; +// | SW0 | SW5 | SW10 | SW15 | SW20 | SW25 | SW25 | SW20 | SW15 | SW10 | SW5 | SW1 | +// | SW1 | SW6 | SW11 | SW16 | SW21 | SW26 | SW26 | SW21 | SW16 | SW11 | SW6 | SW2 | +// | SW2 | SW7 | SW12 | SW17 | SW22 | SW27 | SW27 | SW22 | SW17 | SW12 | SW7 | SW3 | +// | SW3 | SW8 | SW13 | SW18 | SW23 | SW28 | SW28 | SW23 | SW18 | SW13 | SW8 | SW4 | +// | SW4 | SW9 | SW14 | SW19 | SW24 | SW29 | SW29 | SW24 | SW19 | SW14 | SW9 | SW5 | +// SW30 | SW30 + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) +RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) + RC(5,5) RC(5,6) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "row2col"; + row-gpios + = <&pro_micro_d 1 GPIO_ACTIVE_HIGH > + , <&pro_micro_d 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 4 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 5 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 6 GPIO_ACTIVE_HIGH> + ; + + }; +}; diff --git a/zmk/app/boards/shields/splitreus62/splitreus62.keymap b/zmk/app/boards/shields/splitreus62/splitreus62.keymap new file mode 100644 index 00000000..07dd2ad6 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62.keymap @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + + +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// ------------------------------------------------------------------------------------------------------------ +// | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | - | +// | TAB | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | CTRL | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | SHIFT | +// | LCTL | LGUI | LALT | GRAV | | EQL | DEL | BKSP| | RET | SPC | LBKT | RBKT | LBKT | HOME | END | + bindings = < +&kp ESC &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp MINUS +&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH +&kp LCTL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SCLN &kp QUOT +&kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp RSFT +&kp LCTL &kp LGUI &kp LALT &kp GRAV &kp EQL &kp DEL &kp SPC &kp LBKT &kp RBKT &kp MINUS &kp HOME &kp END + &kp BKSP &kp RET + >; + }; + }; +}; diff --git a/zmk/app/boards/shields/splitreus62/splitreus62_left.conf b/zmk/app/boards/shields/splitreus62/splitreus62_left.conf new file mode 100644 index 00000000..e51dee44 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62_left.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y \ No newline at end of file diff --git a/zmk/app/boards/shields/splitreus62/splitreus62_left.overlay b/zmk/app/boards/shields/splitreus62/splitreus62_left.overlay new file mode 100644 index 00000000..b156d608 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62_left.overlay @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +#include "splitreus62.dtsi" + +&kscan0 { + col-gpios + = <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; diff --git a/zmk/app/boards/shields/splitreus62/splitreus62_right.conf b/zmk/app/boards/shields/splitreus62/splitreus62_right.conf new file mode 100644 index 00000000..a835adc1 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62_right.conf @@ -0,0 +1,2 @@ +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL=y \ No newline at end of file diff --git a/zmk/app/boards/shields/splitreus62/splitreus62_right.overlay b/zmk/app/boards/shields/splitreus62/splitreus62_right.overlay new file mode 100644 index 00000000..5db87cc3 --- /dev/null +++ b/zmk/app/boards/shields/splitreus62/splitreus62_right.overlay @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 Derek Schmell + * + * SPDX-License-Identifier: MIT + */ + +#include "splitreus62.dtsi" + +&default_transform { + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; +}; diff --git a/zmk/app/boards/shields/tg4x/Kconfig.defconfig b/zmk/app/boards/shields/tg4x/Kconfig.defconfig new file mode 100644 index 00000000..ca9fa2c3 --- /dev/null +++ b/zmk/app/boards/shields/tg4x/Kconfig.defconfig @@ -0,0 +1,9 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +if SHIELD_TG4X + +config ZMK_KEYBOARD_NAME + default "TG4X" + +endif \ No newline at end of file diff --git a/zmk/app/boards/shields/tg4x/Kconfig.shield b/zmk/app/boards/shields/tg4x/Kconfig.shield new file mode 100644 index 00000000..7e98b710 --- /dev/null +++ b/zmk/app/boards/shields/tg4x/Kconfig.shield @@ -0,0 +1,5 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +config SHIELD_TG4X + def_bool $(shields_list_contains,tg4x) diff --git a/zmk/app/boards/shields/tg4x/tg4x.keymap b/zmk/app/boards/shields/tg4x/tg4x.keymap new file mode 100644 index 00000000..bee5c87b --- /dev/null +++ b/zmk/app/boards/shields/tg4x/tg4x.keymap @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 + +/ { + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "homerow mods"; + #binding-cells = <2>; + tapping_term_ms = <225>; + flavor = "tap-preferred"; + bindings = <&kp>, <&kp>; + }; + }; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BKSP + &kp TAB &hm LGUI A &hm LALT S &hm LCTL D &hm LSFT F &kp G &kp H &hm RSFT J &hm RCTL K &hm RALT L &hm RGUI SCLN &kp RET + &kp LSFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &kp FSLH &kp QUOT + &kp LCTL &kp LALT &kp LGUI < 1 BKSP < 2 SPC &kp LARW &kp DARW &kp UARW &kp RARW + >; + }; + lower { + bindings = < + &kp GRAV &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp PRSC + &kp DEL &trans &kp VOLU &trans &trans &trans &trans &kp LARW &kp DARW &kp UARW &kp RARW &trans + &trans &trans &kp VOLD &trans &trans &trans &trans &trans &trans &bt BT_PRV &bt BT_NXT &bt BT_CLR + &bootloader &reset &trans &trans &trans &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 + >; + }; + + raise { + bindings = < + &kp GRAV &kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0 &kp PRSC + &kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp BSLH + &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp TILD &kp HOME &kp PGUP &kp PGDN &kp END + &trans &trans &trans &trans &trans &trans &kp M_NEXT &kp M_VOLD &kp M_VOLU &kp M_PLAY + >; + }; + }; +}; \ No newline at end of file diff --git a/zmk/app/boards/shields/tg4x/tg4x.overlay b/zmk/app/boards/shields/tg4x/tg4x.overlay new file mode 100644 index 00000000..10ce524a --- /dev/null +++ b/zmk/app/boards/shields/tg4x/tg4x.overlay @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020 The ZMK Contrbutors + * + * SPDX-License-Identifier: MIT + */ + +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <7>; + rows = <8>; + map = < + RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,5) + RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) + RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(6,4) + RC(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,5) RC(7,1) RC(7,2) RC(7,3) RC(7,4) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 2 GPIO_ACTIVE_HIGH> + , <&pro_micro_a 3 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_d 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + + }; + +}; + diff --git a/zmk/app/cmake/zmk_config.cmake b/zmk/app/cmake/zmk_config.cmake new file mode 100644 index 00000000..017dd111 --- /dev/null +++ b/zmk/app/cmake/zmk_config.cmake @@ -0,0 +1,149 @@ +# TODO: Check for env or command line "ZMK_CONFIG" setting. +# * That directory should load +# * defconfigs, +# * .conf file, +# * single overlay, +# * or per board/shield. + +get_property(cached_user_config_value CACHE ZMK_CONFIG PROPERTY VALUE) + +set(user_config_cli_argument ${cached_user_config_value}) # Either new or old +if(user_config_cli_argument STREQUAL CACHED_ZMK_CONFIG) + # We already have a CACHED_ZMK_CONFIG so there is no new input on the CLI + unset(user_config_cli_argument) +endif() + +set(user_config_app_cmake_lists ${ZMK_CONFIG}) +if(cached_user_config_value STREQUAL ZMK_CONFIG) + # The app build scripts did not set a default, The ZMK_CONFIG we are + # reading is the cached value from the CLI + unset(user_config_app_cmake_lists) +endif() + +if(CACHED_ZMK_CONFIG) + # Warn the user if it looks like he is trying to change the user_config + # without cleaning first + if(user_config_cli_argument) + if(NOT (CACHED_ZMK_CONFIG STREQUAL user_config_cli_argument)) + message(WARNING "The build directory must be cleaned pristinely when changing user ZMK config") + endif() + endif() + + set(ZMK_CONFIG ${CACHED_ZMK_CONFIG}) +elseif(user_config_cli_argument) + set(ZMK_CONFIG ${user_config_cli_argument}) + +elseif(DEFINED ENV{ZMK_CONFIG}) + set(ZMK_CONFIG $ENV{ZMK_CONFIG}) + +elseif(user_config_app_cmake_lists) + set(ZMK_CONFIG ${user_config_app_cmake_lists}) +endif() + +# Store the selected user_config in the cache +set(CACHED_ZMK_CONFIG ${ZMK_CONFIG} CACHE STRING "Selected user ZMK config") + +if (ZMK_CONFIG) + set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}") + if(EXISTS ${ZMK_CONFIG}/boards) + message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}") + list(APPEND BOARD_ROOT ${ZMK_CONFIG}) + endif() + if(EXISTS ${ZMK_CONFIG}/dts) + message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}") + list(APPEND DTS_ROOT ${ZMK_CONFIG}) + endif() +endif() + +foreach(root ${BOARD_ROOT}) + if (EXISTS "${root}/boards/${BOARD}.overlay") + list(APPEND ZMK_DTC_FILES "${root}/boards/${BOARD}.overlay") + endif() + find_path(BOARD_DIR + NAMES ${BOARD}_defconfig + PATHS ${root}/boards/*/* + NO_DEFAULT_PATH + ) + if(BOARD_DIR) + list(APPEND KEYMAP_DIRS ${BOARD_DIR}) + endif() + + if(DEFINED SHIELD) + find_path(shields_refs_list + NAMES ${SHIELD}.overlay + PATHS ${root}/boards/shields/* + NO_DEFAULT_PATH + ) + foreach(shield_path ${shields_refs_list}) + get_filename_component(SHIELD_DIR ${shield_path} NAME) + list(APPEND KEYMAP_DIRS ${shield_path}) + endforeach() + endif() +endforeach() + +if (ZMK_CONFIG) + if (EXISTS ${ZMK_CONFIG}) + message(STATUS "ZMK Config directory: ${ZMK_CONFIG}") + list(APPEND DTS_ROOT ${ZMK_CONFIG}) + list(PREPEND KEYMAP_DIRS "${ZMK_CONFIG}") + + if (SHIELD) + message(STATUS "Board: ${BOARD}, ${BOARD_DIR}, ${SHIELD}, ${SHIELD_DIR}") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${SHIELD_DIR}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${SHIELD_DIR}_${BOARD}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${SHIELD}_${BOARD}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/${SHIELD}.overlay") + list(APPEND config_candidates "${ZMK_CONFIG}/${SHIELD_DIR}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${SHIELD_DIR}_${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${SHIELD}_${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/${SHIELD}.conf") + endif() + + # TODO: Board revisions? + list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay") + list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay") + list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf") + list(APPEND config_candidates "${ZMK_CONFIG}/default.conf") + + foreach(overlay ${overlay_candidates}) + if (EXISTS "${overlay}") + message(STATUS "ZMK Config devicetree overlay: ${overlay}") + list(APPEND ZMK_DTC_FILES "${overlay}") + break() + endif() + endforeach() + + foreach(conf ${config_candidates}) + if (EXISTS "${conf}") + message(STATUS "ZMK Config Kconfig: ${conf}") + set(CONF_FILE "${conf}") + break() + endif() + endforeach() + else() + message(WARNING "Unable to locate ZMK config at: ${ZMK_CONFIG}") + endif() +endif() + + +if(NOT KEYMAP_FILE) + foreach(keymap_dir ${KEYMAP_DIRS}) + foreach(keymap_prefix ${SHIELD} ${SHIELD_DIR} ${BOARD} ${BOARD_DIR}) + if (EXISTS ${keymap_dir}/${keymap_prefix}.keymap) + set(KEYMAP_FILE "${keymap_dir}/${keymap_prefix}.keymap" CACHE STRING "Selected keymap file") + message(STATUS "Using keymap file: ${KEYMAP_FILE}") + break() + endif() + endforeach() + endforeach() +endif() + +if (NOT KEYMAP_FILE) + message(FATAL_ERROR "Failed to locate keymap file!") +endif() + +list(APPEND ZMK_DTC_FILES ${KEYMAP_FILE}) + +if (ZMK_DTC_FILES) + string(REPLACE ";" " " DTC_OVERLAY_FILE "${ZMK_DTC_FILES}") +endif() diff --git a/zmk/app/drivers/zephyr/CMakeLists.txt b/zmk/app/drivers/zephyr/CMakeLists.txt new file mode 100644 index 00000000..e3a192d2 --- /dev/null +++ b/zmk/app/drivers/zephyr/CMakeLists.txt @@ -0,0 +1,14 @@ +if(CONFIG_ZMK_KSCAN_GPIO_DRIVER) + zephyr_include_directories(.) + + zephyr_library() + zephyr_library_sources( + kscan_gpio_matrix.c + kscan_gpio_direct.c + kscan_gpio_demux.c + ) + + zephyr_library_sources_ifdef(CONFIG_EC11 ec11.c) + zephyr_library_sources_ifdef(CONFIG_EC11_TRIGGER ec11_trigger.c) + zephyr_library_sources_ifdef(CONFIG_ZMK_BATTERY_VOLTAGE_DIVIDER battery_voltage_divider.c) +endif() diff --git a/zmk/app/drivers/zephyr/Kconfig b/zmk/app/drivers/zephyr/Kconfig new file mode 100644 index 00000000..6b177fb1 --- /dev/null +++ b/zmk/app/drivers/zephyr/Kconfig @@ -0,0 +1,76 @@ +config ZMK_KSCAN_GPIO_DRIVER + bool "Enable GPIO kscan driver to simulate key presses" + default y + select GPIO + +if ZMK_KSCAN_GPIO_DRIVER + +config ZMK_KSCAN_MATRIX_POLLING + bool "Poll for key event triggers instead of using interrupts on matrix boards." + default n + +config ZMK_KSCAN_DIRECT_POLLING + bool "Poll for key event triggers instead of using interrupts on direct wired boards." + default n + +endif + +config ZMK_KSCAN_INIT_PRIORITY + int "Keyboard scan driver init priority" + default 40 + help + Keyboard scan device driver initialization priority. + +config ZMK_BATTERY_VOLTAGE_DIVIDER + bool "ZMK battery voltage divider" + select ADC + help + Enable ZMK battery voltage divider driver for battery monitoring. + +menuconfig EC11 + bool "EC11 Incremental Encoder Sensor" + depends on GPIO + help + Enable driver for EC11 incremental encoder sensors. + +if EC11 + +choice + prompt "Trigger mode" + default EC11_TRIGGER_NONE + help + Specify the type of triggering to be used by the driver. + +config EC11_TRIGGER_NONE + bool "No trigger" + +config EC11_TRIGGER_GLOBAL_THREAD + bool "Use global thread" + depends on GPIO + select EC11_TRIGGER + +config EC11_TRIGGER_OWN_THREAD + bool "Use own thread" + depends on GPIO + select EC11_TRIGGER + +endchoice + +config EC11_TRIGGER + bool + +config EC11_THREAD_PRIORITY + int "Thread priority" + depends on EC11_TRIGGER_OWN_THREAD + default 10 + help + Priority of thread used by the driver to handle interrupts. + +config EC11_THREAD_STACK_SIZE + int "Thread stack size" + depends on EC11_TRIGGER_OWN_THREAD + default 1024 + help + Stack size of thread used by the driver to handle interrupts. + +endif # EC11 diff --git a/zmk/app/drivers/zephyr/battery_voltage_divider.c b/zmk/app/drivers/zephyr/battery_voltage_divider.c new file mode 100644 index 00000000..b94e2a27 --- /dev/null +++ b/zmk/app/drivers/zephyr/battery_voltage_divider.c @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_battery_voltage_divider + +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct io_channel_config { + const char *label; + uint8_t channel; +}; + +struct gpio_channel_config { + const char *label; + uint8_t pin; + uint8_t flags; +}; + +struct bvd_config { + struct io_channel_config io_channel; + struct gpio_channel_config power_gpios; + uint32_t output_ohm; + uint32_t full_ohm; +}; + +struct bvd_data { + struct device *adc; + struct device *gpio; + struct adc_channel_cfg acc; + struct adc_sequence as; + uint16_t adc_raw; + uint16_t voltage; + uint8_t state_of_charge; +}; + +static uint8_t lithium_ion_mv_to_pct(int16_t bat_mv) { + // Simple linear approximation of a battery based off adafruit's discharge graph: + // https://learn.adafruit.com/li-ion-and-lipoly-batteries/voltages + + if (bat_mv >= 4200) { + return 100; + } else if (bat_mv <= 3450) { + return 0; + } + + return bat_mv * 2 / 15 - 459; +} + +static int bvd_sample_fetch(struct device *dev, enum sensor_channel chan) { + struct bvd_data *drv_data = dev->driver_data; + const struct bvd_config *drv_cfg = dev->config_info; + struct adc_sequence *as = &drv_data->as; + + // Make sure selected channel is supported + if (chan != SENSOR_CHAN_GAUGE_VOLTAGE && chan != SENSOR_CHAN_GAUGE_STATE_OF_CHARGE && + chan != SENSOR_CHAN_ALL) { + LOG_DBG("Selected channel is not supported: %d.", chan); + return -ENOTSUP; + } + + int rc = 0; + + // Enable power GPIO if present + if (drv_data->gpio) { + rc = gpio_pin_set(drv_data->gpio, drv_cfg->power_gpios.pin, 1); + + if (rc != 0) { + LOG_DBG("Failed to enable ADC power GPIO: %d", rc); + return rc; + } + } + + // Read ADC + rc = adc_read(drv_data->adc, as); + as->calibrate = false; + + if (rc == 0) { + int32_t val = drv_data->adc_raw; + + adc_raw_to_millivolts(adc_ref_internal(drv_data->adc), drv_data->acc.gain, as->resolution, + &val); + + uint16_t millivolts = val * (uint64_t)drv_cfg->full_ohm / drv_cfg->output_ohm; + LOG_DBG("ADC raw %d ~ %d mV => %d mV\n", drv_data->adc_raw, val, millivolts); + uint8_t percent = lithium_ion_mv_to_pct(millivolts); + LOG_DBG("Percent: %d", percent); + + drv_data->voltage = millivolts; + drv_data->state_of_charge = percent; + } else { + LOG_DBG("Failed to read ADC: %d", rc); + } + + // Disable power GPIO if present + if (drv_data->gpio) { + int rc2 = gpio_pin_set(drv_data->gpio, drv_cfg->power_gpios.pin, 0); + + if (rc2 != 0) { + LOG_DBG("Failed to disable ADC power GPIO: %d", rc2); + return rc2; + } + } + + return rc; +} + +static int bvd_channel_get(struct device *dev, enum sensor_channel chan, struct sensor_value *val) { + struct bvd_data *drv_data = dev->driver_data; + + switch (chan) { + case SENSOR_CHAN_GAUGE_VOLTAGE: + val->val1 = drv_data->voltage / 1000; + val->val2 = (drv_data->voltage % 1000) * 1000U; + break; + + case SENSOR_CHAN_GAUGE_STATE_OF_CHARGE: + val->val1 = drv_data->state_of_charge; + val->val2 = 0; + break; + + default: + return -ENOTSUP; + } + + return 0; +} + +static const struct sensor_driver_api bvd_api = { + .sample_fetch = bvd_sample_fetch, + .channel_get = bvd_channel_get, +}; + +static int bvd_init(struct device *dev) { + struct bvd_data *drv_data = dev->driver_data; + const struct bvd_config *drv_cfg = dev->config_info; + + drv_data->adc = device_get_binding(drv_cfg->io_channel.label); + + if (drv_data->adc == NULL) { + LOG_ERR("ADC %s failed to retrieve", drv_cfg->io_channel.label); + return -ENODEV; + } + + int rc = 0; + + if (drv_cfg->power_gpios.label) { + drv_data->gpio = device_get_binding(drv_cfg->power_gpios.label); + if (drv_data->gpio == NULL) { + LOG_ERR("Failed to get GPIO %s", drv_cfg->power_gpios.label); + return -ENODEV; + } + rc = gpio_pin_configure(drv_data->gpio, drv_cfg->power_gpios.pin, + GPIO_OUTPUT_INACTIVE | drv_cfg->power_gpios.flags); + if (rc != 0) { + LOG_ERR("Failed to control feed %s.%u: %d", drv_cfg->power_gpios.label, + drv_cfg->power_gpios.pin, rc); + return rc; + } + } + + drv_data->as = (struct adc_sequence){ + .channels = BIT(0), + .buffer = &drv_data->adc_raw, + .buffer_size = sizeof(drv_data->adc_raw), + .oversampling = 4, + .calibrate = true, + }; + +#ifdef CONFIG_ADC_NRFX_SAADC + drv_data->acc = (struct adc_channel_cfg){ + .gain = ADC_GAIN_1_5, + .reference = ADC_REF_INTERNAL, + .acquisition_time = ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 40), + .input_positive = SAADC_CH_PSELP_PSELP_AnalogInput0 + drv_cfg->io_channel.channel, + }; + + drv_data->as.resolution = 12; +#else +#error Unsupported ADC +#endif + + rc = adc_channel_setup(drv_data->adc, &drv_data->acc); + LOG_DBG("AIN%u setup returned %d", drv_cfg->io_channel.channel, rc); + + return rc; +} + +static struct bvd_data bvd_data; +static const struct bvd_config bvd_cfg = { + .io_channel = + { + DT_INST_IO_CHANNELS_LABEL(0), + DT_INST_IO_CHANNELS_INPUT(0), + }, +#if DT_INST_NODE_HAS_PROP(0, power_gpios) + .power_gpios = + { + DT_INST_GPIO_LABEL(0, power_gpios), + DT_INST_PIN(0, power_gpios), + DT_INST_FLAGS(0, power_gpios), + }, +#endif + .output_ohm = DT_INST_PROP(0, output_ohms), + .full_ohm = DT_INST_PROP(0, full_ohms), +}; + +DEVICE_AND_API_INIT(bvd_dev, DT_INST_LABEL(0), &bvd_init, &bvd_data, &bvd_cfg, POST_KERNEL, + CONFIG_SENSOR_INIT_PRIORITY, &bvd_api); diff --git a/zmk/app/drivers/zephyr/dts/bindings/alps,ec11.yaml b/zmk/app/drivers/zephyr/dts/bindings/alps,ec11.yaml new file mode 100644 index 00000000..5cbe77a2 --- /dev/null +++ b/zmk/app/drivers/zephyr/dts/bindings/alps,ec11.yaml @@ -0,0 +1,21 @@ +description: | + Sensor driver for the Alps EC11 rotary encoder + +compatible: "alps,ec11" + +properties: + label: + type: string + required: true + a-gpios: + type: phandle-array + required: true + description: A pin for the encoder + b-gpios: + type: phandle-array + required: true + description: A pin for the encoder + resolution: + type: int + description: Number of pulses per tick + required: false diff --git a/zmk/app/drivers/zephyr/dts/bindings/zmk,battery-voltage-divider.yaml b/zmk/app/drivers/zephyr/dts/bindings/zmk,battery-voltage-divider.yaml new file mode 100644 index 00000000..3f391d78 --- /dev/null +++ b/zmk/app/drivers/zephyr/dts/bindings/zmk,battery-voltage-divider.yaml @@ -0,0 +1,14 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Battery SoC monitoring using voltage divider + +compatible: "zmk,battery-voltage-divider" + +include: voltage-divider.yaml + +properties: + label: + required: true + type: string + \ No newline at end of file diff --git a/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-demux.yaml b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-demux.yaml new file mode 100644 index 00000000..a2d8d244 --- /dev/null +++ b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-demux.yaml @@ -0,0 +1,22 @@ +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: GPIO keyboard demux controller + +compatible: "zmk,kscan-gpio-demux" + +include: kscan.yaml + +properties: + input-gpios: + type: phandle-array + required: true + output-gpios: + type: phandle-array + required: true + debounce-period: + type: int + default: 5 + polling-interval-msec: + type: int + default: 25 diff --git a/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-direct.yaml b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-direct.yaml new file mode 100644 index 00000000..09a9b6c0 --- /dev/null +++ b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-direct.yaml @@ -0,0 +1,16 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: Direct GPIO keyboard KSCAN controller + +compatible: "zmk,kscan-gpio-direct" + +include: kscan.yaml + +properties: + input-gpios: + type: phandle-array + required: true + debounce-period: + type: int + default: 5 diff --git a/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml new file mode 100644 index 00000000..5ebcbdd3 --- /dev/null +++ b/zmk/app/drivers/zephyr/dts/bindings/zmk,kscan-gpio-matrix.yaml @@ -0,0 +1,25 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: GPIO keyboard matrix controller + +compatible: "zmk,kscan-gpio-matrix" + +include: kscan.yaml + +properties: + row-gpios: + type: phandle-array + required: true + col-gpios: + type: phandle-array + required: true + debounce-period: + type: int + default: 5 + diode-direction: + type: string + default: row2col + enum: + - row2col + - col2row diff --git a/zmk/app/drivers/zephyr/ec11.c b/zmk/app/drivers/zephyr/ec11.c new file mode 100644 index 00000000..00d00905 --- /dev/null +++ b/zmk/app/drivers/zephyr/ec11.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT alps_ec11 + +#include +#include +#include +#include +#include +#include +#include + +#include "ec11.h" + +LOG_MODULE_REGISTER(EC11, CONFIG_SENSOR_LOG_LEVEL); + +static int ec11_get_ab_state(struct device *dev) { + struct ec11_data *drv_data = dev->driver_data; + const struct ec11_config *drv_cfg = dev->config_info; + + return (gpio_pin_get(drv_data->a, drv_cfg->a_pin) << 1) | + gpio_pin_get(drv_data->b, drv_cfg->b_pin); +} + +static int ec11_sample_fetch(struct device *dev, enum sensor_channel chan) { + struct ec11_data *drv_data = dev->driver_data; + const struct ec11_config *drv_cfg = dev->config_info; + u8_t val; + s8_t delta; + + __ASSERT_NO_MSG(chan == SENSOR_CHAN_ALL || chan == SENSOR_CHAN_ROTATION); + + val = ec11_get_ab_state(dev); + + LOG_DBG("prev: %d, new: %d", drv_data->ab_state, val); + + switch (val | (drv_data->ab_state << 2)) { + case 0b0010: + case 0b0100: + case 0b1101: + case 0b1011: + delta = -1; + break; + case 0b0001: + case 0b0111: + case 0b1110: + case 0b1000: + delta = 1; + break; + default: + delta = 0; + break; + } + + LOG_DBG("Delta: %d", delta); + + drv_data->pulses += delta; + drv_data->ab_state = val; + + drv_data->ticks = drv_data->pulses / drv_cfg->resolution; + drv_data->delta = delta; + drv_data->pulses %= drv_cfg->resolution; + + return 0; +} + +static int ec11_channel_get(struct device *dev, enum sensor_channel chan, + struct sensor_value *val) { + struct ec11_data *drv_data = dev->driver_data; + + if (chan != SENSOR_CHAN_ROTATION) { + return -ENOTSUP; + } + + val->val1 = drv_data->ticks; + val->val2 = drv_data->delta; + + return 0; +} + +static const struct sensor_driver_api ec11_driver_api = { +#ifdef CONFIG_EC11_TRIGGER + .trigger_set = ec11_trigger_set, +#endif + .sample_fetch = ec11_sample_fetch, + .channel_get = ec11_channel_get, +}; + +int ec11_init(struct device *dev) { + struct ec11_data *drv_data = dev->driver_data; + const struct ec11_config *drv_cfg = dev->config_info; + + LOG_DBG("A: %s %d B: %s %d resolution %d", drv_cfg->a_label, drv_cfg->a_pin, drv_cfg->b_label, + drv_cfg->b_pin, drv_cfg->resolution); + + drv_data->a = device_get_binding(drv_cfg->a_label); + if (drv_data->a == NULL) { + LOG_ERR("Failed to get pointer to A GPIO device"); + return -EINVAL; + } + + drv_data->b = device_get_binding(drv_cfg->b_label); + if (drv_data->b == NULL) { + LOG_ERR("Failed to get pointer to B GPIO device"); + return -EINVAL; + } + + if (gpio_pin_configure(drv_data->a, drv_cfg->a_pin, drv_cfg->a_flags | GPIO_INPUT)) { + LOG_DBG("Failed to configure A pin"); + return -EIO; + } + + if (gpio_pin_configure(drv_data->b, drv_cfg->b_pin, drv_cfg->b_flags | GPIO_INPUT)) { + LOG_DBG("Failed to configure B pin"); + return -EIO; + } + +#ifdef CONFIG_EC11_TRIGGER + if (ec11_init_interrupt(dev) < 0) { + LOG_DBG("Failed to initialize interrupt!"); + return -EIO; + } +#endif + + drv_data->ab_state = ec11_get_ab_state(dev); + + return 0; +} + +#define EC11_INST(n) \ + struct ec11_data ec11_data_##n; \ + const struct ec11_config ec11_cfg_##n = { \ + .a_label = DT_INST_GPIO_LABEL(n, a_gpios), \ + .a_pin = DT_INST_GPIO_PIN(n, a_gpios), \ + .a_flags = DT_INST_GPIO_FLAGS(n, a_gpios), \ + .b_label = DT_INST_GPIO_LABEL(n, b_gpios), \ + .b_pin = DT_INST_GPIO_PIN(n, b_gpios), \ + .b_flags = DT_INST_GPIO_FLAGS(n, b_gpios), \ + COND_CODE_0(DT_INST_NODE_HAS_PROP(n, resolution), (1), (DT_INST_PROP(n, resolution))), \ + }; \ + DEVICE_AND_API_INIT(ec11_##n, DT_INST_LABEL(n), ec11_init, &ec11_data_##n, &ec11_cfg_##n, \ + POST_KERNEL, CONFIG_SENSOR_INIT_PRIORITY, &ec11_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(EC11_INST) \ No newline at end of file diff --git a/zmk/app/drivers/zephyr/ec11.h b/zmk/app/drivers/zephyr/ec11.h new file mode 100644 index 00000000..e62e7333 --- /dev/null +++ b/zmk/app/drivers/zephyr/ec11.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +struct ec11_config { + const char *a_label; + const u8_t a_pin; + const u8_t a_flags; + + const char *b_label; + const u8_t b_pin; + const u8_t b_flags; + + const u8_t resolution; +}; + +struct ec11_data { + struct device *a; + struct device *b; + u8_t ab_state; + s8_t pulses; + s8_t ticks; + s8_t delta; + +#ifdef CONFIG_EC11_TRIGGER + struct gpio_callback a_gpio_cb; + struct gpio_callback b_gpio_cb; + struct device *dev; + + sensor_trigger_handler_t handler; + const struct sensor_trigger *trigger; + +#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD) + K_THREAD_STACK_MEMBER(thread_stack, CONFIG_EC11_THREAD_STACK_SIZE); + struct k_sem gpio_sem; + struct k_thread thread; +#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD) + struct k_work work; +#endif + +#endif /* CONFIG_EC11_TRIGGER */ +}; + +#ifdef CONFIG_EC11_TRIGGER + +int ec11_trigger_set(struct device *dev, const struct sensor_trigger *trig, + sensor_trigger_handler_t handler); + +int ec11_init_interrupt(struct device *dev); +#endif diff --git a/zmk/app/drivers/zephyr/ec11_trigger.c b/zmk/app/drivers/zephyr/ec11_trigger.c new file mode 100644 index 00000000..248ac320 --- /dev/null +++ b/zmk/app/drivers/zephyr/ec11_trigger.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT alps_ec11 + +#include +#include +#include +#include +#include + +#include "ec11.h" + +extern struct ec11_data ec11_driver; + +#include +LOG_MODULE_DECLARE(EC11, CONFIG_SENSOR_LOG_LEVEL); + +static inline void setup_int(struct device *dev, bool enable) { + struct ec11_data *data = dev->driver_data; + const struct ec11_config *cfg = dev->config_info; + + LOG_DBG("enabled %s", (enable ? "true" : "false")); + + if (gpio_pin_interrupt_configure(data->a, cfg->a_pin, + enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { + LOG_WRN("Unable to set A pin GPIO interrupt"); + } + + if (gpio_pin_interrupt_configure(data->b, cfg->b_pin, + enable ? GPIO_INT_EDGE_BOTH : GPIO_INT_DISABLE)) { + LOG_WRN("Unable to set A pin GPIO interrupt"); + } +} + +static void ec11_a_gpio_callback(struct device *dev, struct gpio_callback *cb, u32_t pins) { + struct ec11_data *drv_data = CONTAINER_OF(cb, struct ec11_data, a_gpio_cb); + + LOG_DBG(""); + + setup_int(drv_data->dev, false); + +#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD) + k_sem_give(&drv_data->gpio_sem); +#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD) + k_work_submit(&drv_data->work); +#endif +} + +static void ec11_b_gpio_callback(struct device *dev, struct gpio_callback *cb, u32_t pins) { + struct ec11_data *drv_data = CONTAINER_OF(cb, struct ec11_data, b_gpio_cb); + + LOG_DBG(""); + + setup_int(drv_data->dev, false); + +#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD) + k_sem_give(&drv_data->gpio_sem); +#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD) + k_work_submit(&drv_data->work); +#endif +} + +static void ec11_thread_cb(void *arg) { + struct device *dev = arg; + struct ec11_data *drv_data = dev->driver_data; + + drv_data->handler(dev, drv_data->trigger); + + setup_int(dev, true); +} + +#ifdef CONFIG_EC11_TRIGGER_OWN_THREAD +static void ec11_thread(int dev_ptr, int unused) { + struct device *dev = INT_TO_POINTER(dev_ptr); + struct ec11_data *drv_data = dev->driver_data; + + ARG_UNUSED(unused); + + while (1) { + k_sem_take(&drv_data->gpio_sem, K_FOREVER); + ec11_thread_cb(dev); + } +} +#endif + +#ifdef CONFIG_EC11_TRIGGER_GLOBAL_THREAD +static void ec11_work_cb(struct k_work *work) { + struct ec11_data *drv_data = CONTAINER_OF(work, struct ec11_data, work); + + LOG_DBG(""); + + ec11_thread_cb(drv_data->dev); +} +#endif + +int ec11_trigger_set(struct device *dev, const struct sensor_trigger *trig, + sensor_trigger_handler_t handler) { + struct ec11_data *drv_data = dev->driver_data; + + setup_int(dev, false); + + k_msleep(5); + + drv_data->trigger = trig; + drv_data->handler = handler; + + setup_int(dev, true); + + return 0; +} + +int ec11_init_interrupt(struct device *dev) { + struct ec11_data *drv_data = dev->driver_data; + const struct ec11_config *drv_cfg = dev->config_info; + + drv_data->dev = dev; + /* setup gpio interrupt */ + + gpio_init_callback(&drv_data->a_gpio_cb, ec11_a_gpio_callback, BIT(drv_cfg->a_pin)); + + if (gpio_add_callback(drv_data->a, &drv_data->a_gpio_cb) < 0) { + LOG_DBG("Failed to set A callback!"); + return -EIO; + } + + gpio_init_callback(&drv_data->b_gpio_cb, ec11_b_gpio_callback, BIT(drv_cfg->b_pin)); + + if (gpio_add_callback(drv_data->b, &drv_data->b_gpio_cb) < 0) { + LOG_DBG("Failed to set B callback!"); + return -EIO; + } + +#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD) + k_sem_init(&drv_data->gpio_sem, 0, UINT_MAX); + + k_thread_create(&drv_data->thread, drv_data->thread_stack, CONFIG_EC11_THREAD_STACK_SIZE, + (k_thread_entry_t)ec11_thread, dev, 0, NULL, + K_PRIO_COOP(CONFIG_EC11_THREAD_PRIORITY), 0, K_NO_WAIT); +#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD) + k_work_init(&drv_data->work, ec11_work_cb); +#endif + + return 0; +} diff --git a/zmk/app/drivers/zephyr/kscan_gpio_demux.c b/zmk/app/drivers/zephyr/kscan_gpio_demux.c new file mode 100644 index 00000000..6113d7c4 --- /dev/null +++ b/zmk/app/drivers/zephyr/kscan_gpio_demux.c @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_gpio_demux + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct kscan_gpio_item_config { + char *label; + gpio_pin_t pin; + gpio_flags_t flags; +}; + +// Helper macro +#define PWR_TWO(x) (1 << (x)) + +// Define GPIO cfg +#define _KSCAN_GPIO_ITEM_CFG_INIT(n, prop, idx) \ + { \ + .label = DT_INST_GPIO_LABEL_BY_IDX(n, prop, idx), \ + .pin = DT_INST_GPIO_PIN_BY_IDX(n, prop, idx), \ + .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, prop, idx), \ + }, + +// Define row and col cfg +#define _KSCAN_GPIO_INPUT_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, input_gpios, idx) +#define _KSCAN_GPIO_OUTPUT_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, output_gpios, idx) + +// Check debounce config +#define CHECK_DEBOUNCE_CFG(n, a, b) COND_CODE_0(DT_INST_PROP(n, debounce_period), a, b) + +// Define the row and column lengths +#define INST_MATRIX_INPUTS(n) DT_INST_PROP_LEN(n, input_gpios) +#define INST_DEMUX_GPIOS(n) DT_INST_PROP_LEN(n, output_gpios) +#define INST_MATRIX_OUTPUTS(n) PWR_TWO(INST_DEMUX_GPIOS(n)) +#define POLL_INTERVAL(n) DT_INST_PROP(n, polling_interval_msec) + +#define GPIO_INST_INIT(n) \ + struct kscan_gpio_irq_callback_##n { \ + struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_delayed_work)) * work; \ + struct gpio_callback callback; \ + struct device *dev; \ + }; \ + \ + struct kscan_gpio_config_##n { \ + struct kscan_gpio_item_config rows[INST_MATRIX_INPUTS(n)]; \ + struct kscan_gpio_item_config cols[INST_DEMUX_GPIOS(n)]; \ + }; \ + \ + struct kscan_gpio_data_##n { \ + kscan_callback_t callback; \ + struct k_timer poll_timer; \ + struct CHECK_DEBOUNCE_CFG(n, (k_work), (k_delayed_work)) work; \ + bool matrix_state[INST_MATRIX_INPUTS(n)][INST_MATRIX_OUTPUTS(n)]; \ + struct device *rows[INST_MATRIX_INPUTS(n)]; \ + struct device *cols[INST_MATRIX_OUTPUTS(n)]; \ + struct device *dev; \ + }; \ + /* IO/GPIO SETUP */ \ + /* gpio_input_devices are PHYSICAL IO devices */ \ + static struct device **kscan_gpio_input_devices_##n(struct device *dev) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + return data->rows; \ + } \ + \ + static const struct kscan_gpio_item_config *kscan_gpio_input_configs_##n(struct device *dev) { \ + const struct kscan_gpio_config_##n *cfg = dev->config_info; \ + return cfg->rows; \ + } \ + \ + /* gpio_output_devices are PHYSICAL IO devices */ \ + static struct device **kscan_gpio_output_devices_##n(struct device *dev) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + return data->cols; \ + } \ + \ + static const struct kscan_gpio_item_config *kscan_gpio_output_configs_##n( \ + struct device *dev) { \ + const struct kscan_gpio_config_##n *cfg = dev->config_info; \ + /* If row2col, rows = outputs & cols = inputs */ \ + return cfg->cols; \ + } \ + /* POLLING SETUP */ \ + static void kscan_gpio_timer_handler(struct k_timer *timer) { \ + struct kscan_gpio_data_##n *data = \ + CONTAINER_OF(timer, struct kscan_gpio_data_##n, poll_timer); \ + k_work_submit(&data->work.work); \ + } \ + \ + /* Read the state of the input GPIOs */ \ + /* This is the core matrix_scan func */ \ + static int kscan_gpio_read_##n(struct device *dev) { \ + bool submit_follow_up_read = false; \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + static bool read_state[INST_MATRIX_INPUTS(n)][INST_MATRIX_OUTPUTS(n)]; \ + for (int o = 0; o < INST_MATRIX_OUTPUTS(n); o++) { \ + /* Iterate over bits and set GPIOs accordingly */ \ + for (u8_t bit = 0; bit < INST_DEMUX_GPIOS(n); bit++) { \ + u8_t state = (o & (0b1 << bit)) >> bit; \ + struct device *out_dev = kscan_gpio_output_devices_##n(dev)[bit]; \ + const struct kscan_gpio_item_config *out_cfg = \ + &kscan_gpio_output_configs_##n(dev)[bit]; \ + gpio_pin_set(out_dev, out_cfg->pin, state); \ + } \ + \ + for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \ + /* Get the input device (port) */ \ + struct device *in_dev = kscan_gpio_input_devices_##n(dev)[i]; \ + /* Get the input device config (pin) */ \ + const struct kscan_gpio_item_config *in_cfg = \ + &kscan_gpio_input_configs_##n(dev)[i]; \ + read_state[i][o] = gpio_pin_get(in_dev, in_cfg->pin) > 0; \ + } \ + } \ + for (int r = 0; r < INST_MATRIX_INPUTS(n); r++) { \ + for (int c = 0; c < INST_MATRIX_OUTPUTS(n); c++) { \ + bool pressed = read_state[r][c]; \ + submit_follow_up_read = (submit_follow_up_read || pressed); \ + if (pressed != data->matrix_state[r][c]) { \ + LOG_DBG("Sending event at %d,%d state %s", r, c, (pressed ? "on" : "off")); \ + data->matrix_state[r][c] = pressed; \ + data->callback(dev, r, c, pressed); \ + } \ + } \ + } \ + if (submit_follow_up_read) { \ + CHECK_DEBOUNCE_CFG(n, ({ k_work_submit(&data->work); }), ({ \ + k_delayed_work_cancel(&data->work); \ + k_delayed_work_submit(&data->work, K_MSEC(5)); \ + })) \ + } \ + return 0; \ + } \ + \ + static void kscan_gpio_work_handler_##n(struct k_work *work) { \ + struct kscan_gpio_data_##n *data = CONTAINER_OF(work, struct kscan_gpio_data_##n, work); \ + kscan_gpio_read_##n(data->dev); \ + } \ + \ + static struct kscan_gpio_data_##n kscan_gpio_data_##n = { \ + .rows = {[INST_MATRIX_INPUTS(n) - 1] = NULL}, .cols = {[INST_DEMUX_GPIOS(n) - 1] = NULL}}; \ + \ + /* KSCAN API configure function */ \ + static int kscan_gpio_configure_##n(struct device *dev, kscan_callback_t callback) { \ + LOG_DBG("KSCAN API configure"); \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + if (!callback) { \ + return -EINVAL; \ + } \ + data->callback = callback; \ + LOG_DBG("Configured GPIO %d", n); \ + return 0; \ + }; \ + \ + /* KSCAN API enable function */ \ + static int kscan_gpio_enable_##n(struct device *dev) { \ + LOG_DBG("KSCAN API enable"); \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + /* TODO: we might want a follow up to hook into the sleep state hooks in Zephyr, */ \ + /* and disable this timer when we enter a sleep state */ \ + k_timer_start(&data->poll_timer, K_MSEC(POLL_INTERVAL(n)), K_MSEC(POLL_INTERVAL(n))); \ + return 0; \ + }; \ + \ + /* KSCAN API disable function */ \ + static int kscan_gpio_disable_##n(struct device *dev) { \ + LOG_DBG("KSCAN API disable"); \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + k_timer_stop(&data->poll_timer); \ + return 0; \ + }; \ + \ + /* GPIO init function*/ \ + static int kscan_gpio_init_##n(struct device *dev) { \ + LOG_DBG("KSCAN GPIO init"); \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + int err; \ + /* configure input devices*/ \ + struct device **input_devices = kscan_gpio_input_devices_##n(dev); \ + for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \ + const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs_##n(dev)[i]; \ + input_devices[i] = device_get_binding(in_cfg->label); \ + if (!input_devices[i]) { \ + LOG_ERR("Unable to find input GPIO device"); \ + return -EINVAL; \ + } \ + err = gpio_pin_configure(input_devices[i], in_cfg->pin, GPIO_INPUT | in_cfg->flags); \ + if (err) { \ + LOG_ERR("Unable to configure pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + return err; \ + } else { \ + LOG_DBG("Configured pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + } \ + if (err) { \ + LOG_ERR("Error adding the callback to the column device"); \ + return err; \ + } \ + } \ + /* configure output devices*/ \ + struct device **output_devices = kscan_gpio_output_devices_##n(dev); \ + for (int o = 0; o < INST_DEMUX_GPIOS(n); o++) { \ + const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ + output_devices[o] = device_get_binding(out_cfg->label); \ + if (!output_devices[o]) { \ + LOG_ERR("Unable to find output GPIO device"); \ + return -EINVAL; \ + } \ + err = gpio_pin_configure(output_devices[o], out_cfg->pin, \ + GPIO_OUTPUT_ACTIVE | out_cfg->flags); \ + if (err) { \ + LOG_ERR("Unable to configure pin %d on %s for output", out_cfg->pin, \ + out_cfg->label); \ + return err; \ + } else { \ + LOG_DBG("Configured pin %d on %s for output", out_cfg->pin, out_cfg->label); \ + } \ + } \ + data->dev = dev; \ + \ + k_timer_init(&data->poll_timer, kscan_gpio_timer_handler, NULL); \ + \ + (CHECK_DEBOUNCE_CFG(n, (k_work_init), (k_delayed_work_init)))( \ + &data->work, kscan_gpio_work_handler_##n); \ + return 0; \ + } \ + \ + static const struct kscan_driver_api gpio_driver_api_##n = { \ + .config = kscan_gpio_configure_##n, \ + .enable_callback = kscan_gpio_enable_##n, \ + .disable_callback = kscan_gpio_disable_##n, \ + }; \ + \ + static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ + .rows = {UTIL_LISTIFY(INST_MATRIX_INPUTS(n), _KSCAN_GPIO_INPUT_CFG_INIT, n)}, \ + .cols = {UTIL_LISTIFY(INST_DEMUX_GPIOS(n), _KSCAN_GPIO_OUTPUT_CFG_INIT, n)}, \ + }; \ + \ + DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ + &kscan_gpio_data_##n, &kscan_gpio_config_##n, APPLICATION, \ + CONFIG_APPLICATION_INIT_PRIORITY, &gpio_driver_api_##n); + +DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/zmk/app/drivers/zephyr/kscan_gpio_direct.c b/zmk/app/drivers/zephyr/kscan_gpio_direct.c new file mode 100644 index 00000000..4818c995 --- /dev/null +++ b/zmk/app/drivers/zephyr/kscan_gpio_direct.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_gpio_direct + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct kscan_gpio_item_config { + char *label; + gpio_pin_t pin; + gpio_flags_t flags; +}; + +union work_reference { + struct k_delayed_work delayed; + struct k_work direct; +}; + +struct kscan_gpio_config { + u8_t num_of_inputs; + u8_t debounce_period; + struct kscan_gpio_item_config inputs[]; +}; + +struct kscan_gpio_data { +#if defined(CONFIG_ZMK_KSCAN_DIRECT_POLLING) + struct k_timer poll_timer; +#endif /* defined(CONFIG_ZMK_KSCAN_DIRECT_POLLING) */ + kscan_callback_t callback; + union work_reference work; + struct device *dev; + u32_t pin_state; + struct device *inputs[]; +}; + +static struct device **kscan_gpio_input_devices(struct device *dev) { + struct kscan_gpio_data *data = dev->driver_data; + return data->inputs; +} + +static const struct kscan_gpio_item_config *kscan_gpio_input_configs(struct device *dev) { + const struct kscan_gpio_config *cfg = dev->config_info; + return cfg->inputs; +} + +#if !defined(CONFIG_ZMK_KSCAN_DIRECT_POLLING) + +struct kscan_gpio_irq_callback { + union work_reference *work; + u8_t debounce_period; + struct gpio_callback callback; +}; + +static int kscan_gpio_config_interrupts(struct device *dev, gpio_flags_t flags) { + const struct kscan_gpio_config *cfg = dev->config_info; + struct device **devices = kscan_gpio_input_devices(dev); + const struct kscan_gpio_item_config *configs = kscan_gpio_input_configs(dev); + + for (int i = 0; i < cfg->num_of_inputs; i++) { + struct device *dev = devices[i]; + const struct kscan_gpio_item_config *cfg = &configs[i]; + + int err = gpio_pin_interrupt_configure(dev, cfg->pin, flags); + + if (err) { + LOG_ERR("Unable to enable matrix GPIO interrupt"); + return err; + } + } + + return 0; +} + +static int kscan_gpio_direct_enable(struct device *dev) { + return kscan_gpio_config_interrupts(dev, GPIO_INT_DEBOUNCE | GPIO_INT_EDGE_BOTH); +} +static int kscan_gpio_direct_disable(struct device *dev) { + return kscan_gpio_config_interrupts(dev, GPIO_INT_DISABLE); +} + +static void kscan_gpio_irq_callback_handler(struct device *dev, struct gpio_callback *cb, + gpio_port_pins_t pin) { + struct kscan_gpio_irq_callback *data = + CONTAINER_OF(cb, struct kscan_gpio_irq_callback, callback); + + if (data->debounce_period > 0) { + k_delayed_work_cancel(&data->work->delayed); + k_delayed_work_submit(&data->work->delayed, K_MSEC(data->debounce_period)); + } else { + k_work_submit(&data->work->direct); + } +} + +#else /* !defined(CONFIG_ZMK_KSCAN_DIRECT_POLLING) */ + +static void kscan_gpio_timer_handler(struct k_timer *timer) { + struct kscan_gpio_data *data = CONTAINER_OF(timer, struct kscan_gpio_data, poll_timer); + + k_work_submit(&data->work.direct); +} + +static int kscan_gpio_direct_enable(struct device *dev) { + struct kscan_gpio_data *data = dev->driver_data; + k_timer_start(&data->poll_timer, K_MSEC(10), K_MSEC(10)); + return 0; +} +static int kscan_gpio_direct_disable(struct device *dev) { + struct kscan_gpio_data *data = dev->driver_data; + k_timer_stop(&data->poll_timer); + return 0; +} + +#endif /* defined(CONFIG_ZMK_KSCAN_DIRECT_POLLING) */ + +static int kscan_gpio_direct_configure(struct device *dev, kscan_callback_t callback) { + struct kscan_gpio_data *data = dev->driver_data; + if (!callback) { + return -EINVAL; + } + data->callback = callback; + return 0; +} + +static int kscan_gpio_read(struct device *dev) { + struct kscan_gpio_data *data = dev->driver_data; + const struct kscan_gpio_config *cfg = dev->config_info; + u32_t read_state = data->pin_state; + for (int i = 0; i < cfg->num_of_inputs; i++) { + struct device *in_dev = kscan_gpio_input_devices(dev)[i]; + const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs(dev)[i]; + WRITE_BIT(read_state, i, gpio_pin_get(in_dev, in_cfg->pin) > 0); + } + for (int i = 0; i < cfg->num_of_inputs; i++) { + bool prev_pressed = BIT(i) & data->pin_state; + bool pressed = BIT(i) & read_state; + if (pressed != prev_pressed) { + LOG_DBG("Sending event at %d,%d state %s", 0, i, (pressed ? "on" : "off")); + WRITE_BIT(data->pin_state, i, pressed); + data->callback(dev, 0, i, pressed); + } + } + return 0; +} + +static void kscan_gpio_work_handler(struct k_work *work) { + struct kscan_gpio_data *data = CONTAINER_OF(work, struct kscan_gpio_data, work); + kscan_gpio_read(data->dev); +} + +static const struct kscan_driver_api gpio_driver_api = { + .config = kscan_gpio_direct_configure, + .enable_callback = kscan_gpio_direct_enable, + .disable_callback = kscan_gpio_direct_disable, +}; + +#define KSCAN_DIRECT_INPUT_ITEM(i, n) \ + { \ + .label = DT_INST_GPIO_LABEL_BY_IDX(n, input_gpios, i), \ + .pin = DT_INST_GPIO_PIN_BY_IDX(n, input_gpios, i), \ + .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, input_gpios, i), \ + }, + +#define INST_INPUT_LEN(n) DT_INST_PROP_LEN(n, input_gpios) + +#define GPIO_INST_INIT(n) \ + COND_CODE_0(IS_ENABLED(CONFIG_ZMK_KSCAN_DIRECT_POLLING), \ + (static struct kscan_gpio_irq_callback irq_callbacks_##n[INST_INPUT_LEN(n)];), ()) \ + static struct kscan_gpio_data kscan_gpio_data_##n = { \ + .inputs = {[INST_INPUT_LEN(n) - 1] = NULL}}; \ + static int kscan_gpio_init_##n(struct device *dev) { \ + struct kscan_gpio_data *data = dev->driver_data; \ + const struct kscan_gpio_config *cfg = dev->config_info; \ + int err; \ + struct device **input_devices = kscan_gpio_input_devices(dev); \ + for (int i = 0; i < cfg->num_of_inputs; i++) { \ + const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs(dev)[i]; \ + input_devices[i] = device_get_binding(in_cfg->label); \ + if (!input_devices[i]) { \ + LOG_ERR("Unable to find input GPIO device"); \ + return -EINVAL; \ + } \ + err = gpio_pin_configure(input_devices[i], in_cfg->pin, GPIO_INPUT | in_cfg->flags); \ + if (err) { \ + LOG_ERR("Unable to configure pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + return err; \ + } \ + COND_CODE_0( \ + IS_ENABLED(CONFIG_ZMK_KSCAN_DIRECT_POLLING), \ + (irq_callbacks_##n[i].work = &data->work; \ + irq_callbacks_##n[i].debounce_period = cfg->debounce_period; \ + gpio_init_callback(&irq_callbacks_##n[i].callback, \ + kscan_gpio_irq_callback_handler, BIT(in_cfg->pin)); \ + err = gpio_add_callback(input_devices[i], &irq_callbacks_##n[i].callback); \ + if (err) { \ + LOG_ERR("Error adding the callback to the column device"); \ + return err; \ + }), \ + ()) \ + } \ + data->dev = dev; \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KSCAN_DIRECT_POLLING), \ + (k_timer_init(&data->poll_timer, kscan_gpio_timer_handler, NULL);), ()) \ + if (cfg->debounce_period > 0) { \ + k_delayed_work_init(&data->work.delayed, kscan_gpio_work_handler); \ + } else { \ + k_work_init(&data->work.direct, kscan_gpio_work_handler); \ + } \ + return 0; \ + } \ + static const struct kscan_gpio_config kscan_gpio_config_##n = { \ + .inputs = {UTIL_LISTIFY(INST_INPUT_LEN(n), KSCAN_DIRECT_INPUT_ITEM, n)}, \ + .num_of_inputs = INST_INPUT_LEN(n), \ + .debounce_period = DT_INST_PROP(n, debounce_period)}; \ + DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ + &kscan_gpio_data_##n, &kscan_gpio_config_##n, POST_KERNEL, \ + CONFIG_ZMK_KSCAN_INIT_PRIORITY, &gpio_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/zmk/app/drivers/zephyr/kscan_gpio_matrix.c b/zmk/app/drivers/zephyr/kscan_gpio_matrix.c new file mode 100644 index 00000000..ec4fb39a --- /dev/null +++ b/zmk/app/drivers/zephyr/kscan_gpio_matrix.c @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_gpio_matrix + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +struct kscan_gpio_item_config { + char *label; + gpio_pin_t pin; + gpio_flags_t flags; +}; + +#define _KSCAN_GPIO_ITEM_CFG_INIT(n, prop, idx) \ + { \ + .label = DT_INST_GPIO_LABEL_BY_IDX(n, prop, idx), \ + .pin = DT_INST_GPIO_PIN_BY_IDX(n, prop, idx), \ + .flags = DT_INST_GPIO_FLAGS_BY_IDX(n, prop, idx), \ + }, + +#define _KSCAN_GPIO_ROW_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, row_gpios, idx) +#define _KSCAN_GPIO_COL_CFG_INIT(idx, n) _KSCAN_GPIO_ITEM_CFG_INIT(n, col_gpios, idx) + +#if !defined(CONFIG_ZMK_KSCAN_MATRIX_POLLING) +static int kscan_gpio_config_interrupts(struct device **devices, + const struct kscan_gpio_item_config *configs, size_t len, + gpio_flags_t flags) { + for (int i = 0; i < len; i++) { + struct device *dev = devices[i]; + const struct kscan_gpio_item_config *cfg = &configs[i]; + + int err = gpio_pin_interrupt_configure(dev, cfg->pin, flags); + + if (err) { + LOG_ERR("Unable to enable matrix GPIO interrupt"); + return err; + } + } + + return 0; +} +#endif + +#define INST_MATRIX_ROWS(n) DT_INST_PROP_LEN(n, row_gpios) +#define INST_MATRIX_COLS(n) DT_INST_PROP_LEN(n, col_gpios) +#define INST_OUTPUT_LEN(n) \ + COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (INST_MATRIX_ROWS(n)), \ + (INST_MATRIX_COLS(n))) +#define INST_INPUT_LEN(n) \ + COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (INST_MATRIX_COLS(n)), \ + (INST_MATRIX_ROWS(n))) + +#define GPIO_INST_INIT(n) \ + struct kscan_gpio_irq_callback_##n { \ + struct COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work), (k_delayed_work)) * work; \ + struct gpio_callback callback; \ + struct device *dev; \ + }; \ + static struct kscan_gpio_irq_callback_##n irq_callbacks_##n[INST_INPUT_LEN(n)]; \ + struct kscan_gpio_config_##n { \ + struct kscan_gpio_item_config rows[INST_MATRIX_ROWS(n)]; \ + struct kscan_gpio_item_config cols[INST_MATRIX_COLS(n)]; \ + }; \ + struct kscan_gpio_data_##n { \ + kscan_callback_t callback; \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (struct k_timer poll_timer;), ()) \ + struct COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work), (k_delayed_work)) work; \ + bool matrix_state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)]; \ + struct device *rows[INST_MATRIX_ROWS(n)]; \ + struct device *cols[INST_MATRIX_COLS(n)]; \ + struct device *dev; \ + }; \ + static struct device **kscan_gpio_input_devices_##n(struct device *dev) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + return (COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (data->cols), \ + (data->rows))); \ + } \ + static const struct kscan_gpio_item_config *kscan_gpio_input_configs_##n(struct device *dev) { \ + const struct kscan_gpio_config_##n *cfg = dev->config_info; \ + return (( \ + COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (cfg->cols), (cfg->rows)))); \ + } \ + static struct device **kscan_gpio_output_devices_##n(struct device *dev) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + return (COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (data->rows), \ + (data->cols))); \ + } \ + static const struct kscan_gpio_item_config *kscan_gpio_output_configs_##n( \ + struct device *dev) { \ + const struct kscan_gpio_config_##n *cfg = dev->config_info; \ + return ( \ + COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (cfg->rows), (cfg->cols))); \ + } \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (), \ + ( \ + static int kscan_gpio_enable_interrupts_##n(struct device *dev) { \ + return kscan_gpio_config_interrupts( \ + kscan_gpio_input_devices_##n(dev), kscan_gpio_input_configs_##n(dev), \ + INST_INPUT_LEN(n), GPIO_INT_LEVEL_ACTIVE); \ + } static int kscan_gpio_disable_interrupts_##n(struct device *dev) { \ + return kscan_gpio_config_interrupts(kscan_gpio_input_devices_##n(dev), \ + kscan_gpio_input_configs_##n(dev), \ + INST_INPUT_LEN(n), GPIO_INT_DISABLE); \ + })) \ + static void kscan_gpio_set_output_state_##n(struct device *dev, int value) { \ + int err; \ + for (int i = 0; i < INST_OUTPUT_LEN(n); i++) { \ + struct device *in_dev = kscan_gpio_output_devices_##n(dev)[i]; \ + const struct kscan_gpio_item_config *cfg = &kscan_gpio_output_configs_##n(dev)[i]; \ + if ((err = gpio_pin_set(in_dev, cfg->pin, value))) { \ + LOG_DBG("FAILED TO SET OUTPUT %d to %d", cfg->pin, err); \ + } \ + } \ + } \ + static void kscan_gpio_set_matrix_state_##n( \ + bool state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)], u32_t input_index, \ + u32_t output_index, bool value) { \ + state[COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (output_index), \ + (input_index))] \ + [COND_CODE_0(DT_ENUM_IDX(DT_DRV_INST(n), diode_direction), (input_index), \ + (output_index))] = value; \ + } \ + static int kscan_gpio_read_##n(struct device *dev) { \ + bool submit_follow_up_read = false; \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + static bool read_state[INST_MATRIX_ROWS(n)][INST_MATRIX_COLS(n)]; \ + /* Disable our interrupts temporarily while we scan, to avoid */ \ + /* re-entry while we iterate columns and set them active one by one */ \ + /* to get pressed state for each matrix cell. */ \ + kscan_gpio_set_output_state_##n(dev, 0); \ + for (int o = 0; o < INST_OUTPUT_LEN(n); o++) { \ + struct device *out_dev = kscan_gpio_output_devices_##n(dev)[o]; \ + const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ + gpio_pin_set(out_dev, out_cfg->pin, 1); \ + for (int i = 0; i < INST_INPUT_LEN(n); i++) { \ + struct device *in_dev = kscan_gpio_input_devices_##n(dev)[i]; \ + const struct kscan_gpio_item_config *in_cfg = \ + &kscan_gpio_input_configs_##n(dev)[i]; \ + kscan_gpio_set_matrix_state_##n(read_state, i, o, \ + gpio_pin_get(in_dev, in_cfg->pin) > 0); \ + } \ + gpio_pin_set(out_dev, out_cfg->pin, 0); \ + } \ + /* Set all our outputs as active again. */ \ + kscan_gpio_set_output_state_##n(dev, 1); \ + for (int r = 0; r < INST_MATRIX_ROWS(n); r++) { \ + for (int c = 0; c < INST_MATRIX_COLS(n); c++) { \ + bool pressed = read_state[r][c]; \ + /* Follow up reads needed because further interrupts won't fire on already tripped \ + * input GPIO pins */ \ + submit_follow_up_read = (submit_follow_up_read || pressed); \ + if (pressed != data->matrix_state[r][c]) { \ + LOG_DBG("Sending event at %d,%d state %s", r, c, (pressed ? "on" : "off")); \ + data->matrix_state[r][c] = pressed; \ + data->callback(dev, r, c, pressed); \ + } \ + } \ + } \ + if (submit_follow_up_read) { \ + COND_CODE_0(DT_INST_PROP(n, debounce_period), ({ k_work_submit(&data->work); }), ({ \ + k_delayed_work_cancel(&data->work); \ + k_delayed_work_submit(&data->work, K_MSEC(5)); \ + })) \ + } else { \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (), \ + (kscan_gpio_enable_interrupts_##n(dev);)) \ + } \ + return 0; \ + } \ + static void kscan_gpio_work_handler_##n(struct k_work *work) { \ + struct kscan_gpio_data_##n *data = CONTAINER_OF(work, struct kscan_gpio_data_##n, work); \ + kscan_gpio_read_##n(data->dev); \ + } \ + static void kscan_gpio_irq_callback_handler_##n(struct device *dev, struct gpio_callback *cb, \ + gpio_port_pins_t pin) { \ + struct kscan_gpio_irq_callback_##n *data = \ + CONTAINER_OF(cb, struct kscan_gpio_irq_callback_##n, callback); \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, (), \ + (kscan_gpio_disable_interrupts_##n(data->dev);)) \ + COND_CODE_0(DT_INST_PROP(n, debounce_period), ({ k_work_submit(data->work); }), ({ \ + k_delayed_work_cancel(data->work); \ + k_delayed_work_submit(data->work, \ + K_MSEC(DT_INST_PROP(n, debounce_period))); \ + })) \ + } \ + \ + static struct kscan_gpio_data_##n kscan_gpio_data_##n = { \ + .rows = {[INST_MATRIX_ROWS(n) - 1] = NULL}, .cols = {[INST_MATRIX_COLS(n) - 1] = NULL}}; \ + static int kscan_gpio_configure_##n(struct device *dev, kscan_callback_t callback) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + if (!callback) { \ + return -EINVAL; \ + } \ + data->callback = callback; \ + LOG_DBG("Configured GPIO %d", n); \ + return 0; \ + }; \ + static int kscan_gpio_enable_##n(struct device *dev) { \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, \ + (struct kscan_gpio_data_##n *data = dev->driver_data; \ + k_timer_start(&data->poll_timer, K_MSEC(10), K_MSEC(10)); return 0;), \ + (int err = kscan_gpio_enable_interrupts_##n(dev); \ + if (err) { return err; } return kscan_gpio_read_##n(dev);)) \ + }; \ + static int kscan_gpio_disable_##n(struct device *dev) { \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, \ + (struct kscan_gpio_data_##n *data = dev->driver_data; \ + k_timer_stop(&data->poll_timer); return 0;), \ + (return kscan_gpio_disable_interrupts_##n(dev);)) \ + }; \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, \ + (static void kscan_gpio_timer_handler(struct k_timer *timer) { \ + struct kscan_gpio_data_##n *data = \ + CONTAINER_OF(timer, struct kscan_gpio_data_##n, poll_timer); \ + k_work_submit(&data->work.work); \ + }), \ + ()) \ + static int kscan_gpio_init_##n(struct device *dev) { \ + struct kscan_gpio_data_##n *data = dev->driver_data; \ + int err; \ + struct device **input_devices = kscan_gpio_input_devices_##n(dev); \ + for (int i = 0; i < INST_INPUT_LEN(n); i++) { \ + const struct kscan_gpio_item_config *in_cfg = &kscan_gpio_input_configs_##n(dev)[i]; \ + input_devices[i] = device_get_binding(in_cfg->label); \ + if (!input_devices[i]) { \ + LOG_ERR("Unable to find input GPIO device"); \ + return -EINVAL; \ + } \ + err = gpio_pin_configure(input_devices[i], in_cfg->pin, GPIO_INPUT | in_cfg->flags); \ + if (err) { \ + LOG_ERR("Unable to configure pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + return err; \ + } else { \ + LOG_DBG("Configured pin %d on %s for input", in_cfg->pin, in_cfg->label); \ + } \ + irq_callbacks_##n[i].work = &data->work; \ + irq_callbacks_##n[i].dev = dev; \ + gpio_init_callback(&irq_callbacks_##n[i].callback, \ + kscan_gpio_irq_callback_handler_##n, BIT(in_cfg->pin)); \ + err = gpio_add_callback(input_devices[i], &irq_callbacks_##n[i].callback); \ + if (err) { \ + LOG_ERR("Error adding the callback to the column device"); \ + return err; \ + } \ + } \ + struct device **output_devices = kscan_gpio_output_devices_##n(dev); \ + for (int o = 0; o < INST_OUTPUT_LEN(n); o++) { \ + const struct kscan_gpio_item_config *out_cfg = &kscan_gpio_output_configs_##n(dev)[o]; \ + output_devices[o] = device_get_binding(out_cfg->label); \ + if (!output_devices[o]) { \ + LOG_ERR("Unable to find output GPIO device"); \ + return -EINVAL; \ + } \ + err = gpio_pin_configure(output_devices[o], out_cfg->pin, \ + GPIO_OUTPUT_ACTIVE | out_cfg->flags); \ + if (err) { \ + LOG_ERR("Unable to configure pin %d on %s for output", out_cfg->pin, \ + out_cfg->label); \ + return err; \ + } \ + } \ + data->dev = dev; \ + COND_CODE_1(CONFIG_ZMK_KSCAN_MATRIX_POLLING, \ + (k_timer_init(&data->poll_timer, kscan_gpio_timer_handler, NULL);), ()) \ + (COND_CODE_0(DT_INST_PROP(n, debounce_period), (k_work_init), (k_delayed_work_init)))( \ + &data->work, kscan_gpio_work_handler_##n); \ + return 0; \ + } \ + static const struct kscan_driver_api gpio_driver_api_##n = { \ + .config = kscan_gpio_configure_##n, \ + .enable_callback = kscan_gpio_enable_##n, \ + .disable_callback = kscan_gpio_disable_##n, \ + }; \ + static const struct kscan_gpio_config_##n kscan_gpio_config_##n = { \ + .rows = {UTIL_LISTIFY(INST_MATRIX_ROWS(n), _KSCAN_GPIO_ROW_CFG_INIT, n)}, \ + .cols = {UTIL_LISTIFY(INST_MATRIX_COLS(n), _KSCAN_GPIO_COL_CFG_INIT, n)}, \ + }; \ + DEVICE_AND_API_INIT(kscan_gpio_##n, DT_INST_LABEL(n), kscan_gpio_init_##n, \ + &kscan_gpio_data_##n, &kscan_gpio_config_##n, APPLICATION, \ + CONFIG_APPLICATION_INIT_PRIORITY, &gpio_driver_api_##n); + +DT_INST_FOREACH_STATUS_OKAY(GPIO_INST_INIT) + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/zmk/app/drivers/zephyr/module.yaml b/zmk/app/drivers/zephyr/module.yaml new file mode 100644 index 00000000..cbff6a1a --- /dev/null +++ b/zmk/app/drivers/zephyr/module.yaml @@ -0,0 +1,3 @@ +build: + cmake: zephyr + kconfig: zephyr/Kconfig diff --git a/zmk/app/dts/behaviors.dtsi b/zmk/app/dts/behaviors.dtsi new file mode 100644 index 00000000..a120b84b --- /dev/null +++ b/zmk/app/dts/behaviors.dtsi @@ -0,0 +1,13 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include diff --git a/zmk/app/dts/behaviors/bluetooth.dtsi b/zmk/app/dts/behaviors/bluetooth.dtsi new file mode 100644 index 00000000..ea09f4a2 --- /dev/null +++ b/zmk/app/dts/behaviors/bluetooth.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + bt: behavior_bluetooth { + compatible = "zmk,behavior-bluetooth"; + label = "BLUETOOTH"; + #binding-cells = <2>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/ext_power.dtsi b/zmk/app/dts/behaviors/ext_power.dtsi new file mode 100644 index 00000000..92f00352 --- /dev/null +++ b/zmk/app/dts/behaviors/ext_power.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + ext_power: behavior_ext_power { + compatible = "zmk,behavior-ext-power"; + label = "EXT_POWER_BEHAVIOR"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/key_press.dtsi b/zmk/app/dts/behaviors/key_press.dtsi new file mode 100644 index 00000000..e0668327 --- /dev/null +++ b/zmk/app/dts/behaviors/key_press.dtsi @@ -0,0 +1,11 @@ + +/ { + behaviors { + /* DEPRECATED: `cp` will be removed in the future */ + cp: kp: behavior_key_press { + compatible = "zmk,behavior-key-press"; + label = "KEY_PRESS"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/layer_tap.dtsi b/zmk/app/dts/behaviors/layer_tap.dtsi new file mode 100644 index 00000000..af7319b3 --- /dev/null +++ b/zmk/app/dts/behaviors/layer_tap.dtsi @@ -0,0 +1,12 @@ +/ { + behaviors { + lt: behavior_layer_tap { + compatible = "zmk,behavior-hold-tap"; + label = "LAYER_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <200>; + bindings = <&mo>, <&kp>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/mod_tap.dtsi b/zmk/app/dts/behaviors/mod_tap.dtsi new file mode 100644 index 00000000..4ce732b4 --- /dev/null +++ b/zmk/app/dts/behaviors/mod_tap.dtsi @@ -0,0 +1,12 @@ +/ { + behaviors { + mt: behavior_mod_tap { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <200>; + bindings = <&kp>, <&kp>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/momentary_layer.dtsi b/zmk/app/dts/behaviors/momentary_layer.dtsi new file mode 100644 index 00000000..e5b6c3ce --- /dev/null +++ b/zmk/app/dts/behaviors/momentary_layer.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + mo: behavior_momentary_layer { + compatible = "zmk,behavior-momentary-layer"; + label = "MO"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/none.dtsi b/zmk/app/dts/behaviors/none.dtsi new file mode 100644 index 00000000..e84ed491 --- /dev/null +++ b/zmk/app/dts/behaviors/none.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + none: behavior_none { + compatible = "zmk,behavior-none"; + label = "NONE"; + #binding-cells = <0>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/outputs.dtsi b/zmk/app/dts/behaviors/outputs.dtsi new file mode 100644 index 00000000..a534cbf9 --- /dev/null +++ b/zmk/app/dts/behaviors/outputs.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + out: behavior_outputs { + compatible = "zmk,behavior-outputs"; + label = "OUTPUTS"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/reset.dtsi b/zmk/app/dts/behaviors/reset.dtsi new file mode 100644 index 00000000..fc4fa149 --- /dev/null +++ b/zmk/app/dts/behaviors/reset.dtsi @@ -0,0 +1,18 @@ +#include + +/ { + behaviors { + reset: behavior_reset { + compatible = "zmk,behavior-reset"; + label = "RESET"; + #binding-cells = <0>; + }; + + bootloader: behavior_reset_dfu { + compatible = "zmk,behavior-reset"; + label = "BOOTLOADER_RESET"; + type = ; + #binding-cells = <0>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/rgb_underglow.dtsi b/zmk/app/dts/behaviors/rgb_underglow.dtsi new file mode 100644 index 00000000..e8ad9da8 --- /dev/null +++ b/zmk/app/dts/behaviors/rgb_underglow.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + rgb_ug: behavior_rgb_underglow { + compatible = "zmk,behavior-rgb-underglow"; + label = "RGB_UNDERGLOW"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/sensor_rotate_key_press.dtsi b/zmk/app/dts/behaviors/sensor_rotate_key_press.dtsi new file mode 100644 index 00000000..d06eca23 --- /dev/null +++ b/zmk/app/dts/behaviors/sensor_rotate_key_press.dtsi @@ -0,0 +1,11 @@ + +/ { + behaviors { + /* DEPRECATED: `inc_dec_cp` will be removed in the future */ + inc_dec_cp: inc_dec_kp: behavior_sensor_rotate_key_press { + compatible = "zmk,behavior-sensor-rotate-key-press"; + label = "ENC_KEY_PRESS"; + #sensor-binding-cells = <2>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/toggle_layer.dtsi b/zmk/app/dts/behaviors/toggle_layer.dtsi new file mode 100644 index 00000000..40453962 --- /dev/null +++ b/zmk/app/dts/behaviors/toggle_layer.dtsi @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +/ { + behaviors { + tog: behavior_toggle_layer { + compatible = "zmk,behavior-toggle-layer"; + label = "TOGGLE_LAYER"; + #binding-cells = <1>; + }; + }; +}; diff --git a/zmk/app/dts/behaviors/transparent.dtsi b/zmk/app/dts/behaviors/transparent.dtsi new file mode 100644 index 00000000..ddd05220 --- /dev/null +++ b/zmk/app/dts/behaviors/transparent.dtsi @@ -0,0 +1,9 @@ +/ { + behaviors { + trans: behavior_transparent { + compatible = "zmk,behavior-transparent"; + label = "TRANS"; + #binding-cells = <0>; + }; + }; +}; diff --git a/zmk/app/dts/bindings/behaviors/one_param.yaml b/zmk/app/dts/bindings/behaviors/one_param.yaml new file mode 100644 index 00000000..1f33aee2 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/one_param.yaml @@ -0,0 +1,14 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +properties: + label: + type: string + required: true + "#binding-cells": + type: int + required: true + const: 1 + +binding-cells: + - param1 diff --git a/zmk/app/dts/bindings/behaviors/two_param.yaml b/zmk/app/dts/bindings/behaviors/two_param.yaml new file mode 100644 index 00000000..f8b3af93 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/two_param.yaml @@ -0,0 +1,15 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +properties: + label: + type: string + required: true + "#binding-cells": + type: int + required: true + const: 2 + +binding-cells: + - param1 + - param2 diff --git a/zmk/app/dts/bindings/behaviors/zero_param.yaml b/zmk/app/dts/bindings/behaviors/zero_param.yaml new file mode 100644 index 00000000..20f15288 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zero_param.yaml @@ -0,0 +1,11 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +properties: + label: + type: string + required: true + "#binding-cells": + type: int + required: true + const: 0 diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-bluetooth.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-bluetooth.yaml new file mode 100644 index 00000000..127ebe0b --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-bluetooth.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Peter Johanson +# SPDX-License-Identifier: MIT + +description: Bluetooth Behavior + +compatible: "zmk,behavior-bluetooth" + +include: two_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-ext-power.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-ext-power.yaml new file mode 100644 index 00000000..d86c6f9f --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-ext-power.yaml @@ -0,0 +1,10 @@ +# +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +description: External power control Behavior + +compatible: "zmk,behavior-ext-power" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml new file mode 100644 index 00000000..5f74e9ad --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-hold-tap.yaml @@ -0,0 +1,23 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Hold or Tap behavior + +compatible: "zmk,behavior-hold-tap" + +include: two_param.yaml + +properties: + bindings: + type: phandles + required: true + tapping_term_ms: + type: int + flavor: + type: string + required: false + default: "hold-preferred" + enum: + - "hold-preferred" + - "balanced" + - "tap-preferred" diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-key-press.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-key-press.yaml new file mode 100644 index 00000000..0169d7d5 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-key-press.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: Key press/release behavior + +compatible: "zmk,behavior-key-press" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-momentary-layer.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-momentary-layer.yaml new file mode 100644 index 00000000..70c7c7f9 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-momentary-layer.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: Momentary layer on press/release behavior + +compatible: "zmk,behavior-momentary-layer" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-none.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-none.yaml new file mode 100644 index 00000000..9c66c947 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-none.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: None Binding Behavior + +compatible: "zmk,behavior-none" + +include: zero_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-outputs.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-outputs.yaml new file mode 100644 index 00000000..8bcefd94 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-outputs.yaml @@ -0,0 +1,10 @@ +# +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +description: Output Selection Behavior + +compatible: "zmk,behavior-outputs" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-reset.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-reset.yaml new file mode 100644 index 00000000..061b15e3 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-reset.yaml @@ -0,0 +1,13 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: Keyboard Reset Behavior + +compatible: "zmk,behavior-reset" + +include: zero_param.yaml + +properties: + type: + type: int + default: 0 diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-rgb-underglow.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-rgb-underglow.yaml new file mode 100644 index 00000000..2cb74b9c --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-rgb-underglow.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: RGB Underglow Action + +compatible: "zmk,behavior-rgb-underglow" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml new file mode 100644 index 00000000..b34507f7 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-sensor-rotate-key-press.yaml @@ -0,0 +1,19 @@ +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Sensor rotate key press/release behavior + +compatible: "zmk,behavior-sensor-rotate-key-press" + +properties: + label: + type: string + required: true + "#sensor-binding-cells": + type: int + required: true + const: 2 + +sensor-binding-cells: + - param1 + - param2 diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml new file mode 100644 index 00000000..0a9723f7 --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-toggle-layer.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020 The ZMK Contributors +# SPDX-License-Identifier: MIT + +description: Toggle Layer + +compatible: "zmk,behavior-toggle-layer" + +include: one_param.yaml diff --git a/zmk/app/dts/bindings/behaviors/zmk,behavior-transparent.yaml b/zmk/app/dts/bindings/behaviors/zmk,behavior-transparent.yaml new file mode 100644 index 00000000..33f1abae --- /dev/null +++ b/zmk/app/dts/bindings/behaviors/zmk,behavior-transparent.yaml @@ -0,0 +1,8 @@ +# Copyright (c) 2020, Pete Johanson +# SPDX-License-Identifier: MIT + +description: Transparent Binding Behavior + +compatible: "zmk,behavior-transparent" + +include: zero_param.yaml diff --git a/zmk/app/dts/bindings/zmk,ext-power-generic.yaml b/zmk/app/dts/bindings/zmk,ext-power-generic.yaml new file mode 100644 index 00000000..5a38a09a --- /dev/null +++ b/zmk/app/dts/bindings/zmk,ext-power-generic.yaml @@ -0,0 +1,20 @@ +# +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +description: | + Generic driver for controlling the external power output + by toggling the control-gpio pin status + (Only in supported hardware) + +compatible: "zmk,ext-power-generic" + +properties: + control-gpios: + type: phandle-array + required: true + label: + type: string + required: true + diff --git a/zmk/app/dts/bindings/zmk,keymap-sensors.yaml b/zmk/app/dts/bindings/zmk,keymap-sensors.yaml new file mode 100644 index 00000000..86ae5c22 --- /dev/null +++ b/zmk/app/dts/bindings/zmk,keymap-sensors.yaml @@ -0,0 +1,14 @@ +# +# Copyright (c) 2020, The ZMK Contributors +# SPDX-License-Identifier: MIT +# + +description: | + Allows defining the collection of sensors bound in the keymap layers + +compatible: "zmk,keymap-sensors" + +properties: + sensors: + type: phandles + required: true diff --git a/zmk/app/dts/bindings/zmk,keymap.yaml b/zmk/app/dts/bindings/zmk,keymap.yaml new file mode 100644 index 00000000..fb6d9147 --- /dev/null +++ b/zmk/app/dts/bindings/zmk,keymap.yaml @@ -0,0 +1,15 @@ +description: | + Allows defining a keymap composed of multiple layers + +compatible: "zmk,keymap" + +child-binding: + description: "A layer to be used in a keymap" + + properties: + bindings: + type: phandle-array + required: true + sensor-bindings: + type: phandle-array + required: false diff --git a/zmk/app/dts/bindings/zmk,kscan-composite.yaml b/zmk/app/dts/bindings/zmk,kscan-composite.yaml new file mode 100644 index 00000000..6126c303 --- /dev/null +++ b/zmk/app/dts/bindings/zmk,kscan-composite.yaml @@ -0,0 +1,27 @@ +description: | + Allows composing multiple KSCAN devices into one virtual device + +compatible: "zmk,kscan-composite" + +properties: + label: + type: string + rows: + type: int + columns: + type: int + +child-binding: + description: "Details of an included KSCAN devices" + + properties: + label: + type: string + kscan: + type: phandle + row-offset: + type: int + default: 0 + column-offset: + type: int + default: 0 diff --git a/zmk/app/dts/bindings/zmk,kscan-mock.yaml b/zmk/app/dts/bindings/zmk,kscan-mock.yaml new file mode 100644 index 00000000..f9d83fa7 --- /dev/null +++ b/zmk/app/dts/bindings/zmk,kscan-mock.yaml @@ -0,0 +1,19 @@ +description: | + Allows defining a mock keyboard scan driver that simulates periodic events. + +compatible: "zmk,kscan-mock" + +properties: + label: + type: string + event-period: + type: int + description: Milliseconds between each generated event + events: + type: array + rows: + type: int + columns: + type: int + exit-after: + type: boolean diff --git a/zmk/app/dts/bindings/zmk,matrix-transform.yaml b/zmk/app/dts/bindings/zmk,matrix-transform.yaml new file mode 100644 index 00000000..b7d000c5 --- /dev/null +++ b/zmk/app/dts/bindings/zmk,matrix-transform.yaml @@ -0,0 +1,18 @@ +description: | + Defines a mapping from keymap logical positions to matrix physical positions + +compatible: "zmk,matrix-transform" + +properties: + columns: + type: int + required: true + rows: + type: int + required: true + col-offset: + type: int + default: 0 + map: + type: array + required: true diff --git a/zmk/app/dts/common/arduino_uno_pro_micro_map.dtsi b/zmk/app/dts/common/arduino_uno_pro_micro_map.dtsi new file mode 100644 index 00000000..fe59a866 --- /dev/null +++ b/zmk/app/dts/common/arduino_uno_pro_micro_map.dtsi @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2020 Pete Johanson + * + * SPDX-License-Identifier: MIT + */ + +/* This provies a mapping from Arduino Uno to Arduino Pro Micro pins for development */ + +/ { + pro_micro_d: connector_d { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &arduino_header 6 0> /* D0 */ + , <1 0 &arduino_header 7 0> /* D1 */ + , <2 0 &arduino_header 8 0> /* D2 */ + , <3 0 &arduino_header 9 0> /* D3 */ + , <4 0 &arduino_header 10 0> /* D4/A6 */ + , <5 0 &arduino_header 11 0> /* D5 */ + , <6 0 &arduino_header 12 0> /* D6/A7 */ + , <7 0 &arduino_header 13 0> /* D7 */ + , <8 0 &arduino_header 14 0> /* D8/A8 */ + , <9 0 &arduino_header 15 0> /* D9/A9 */ + , <10 0 &arduino_header 16 0> /* D10/A10 */ + , <16 0 &arduino_header 17 0> /* D16 */ + , <14 0 &arduino_header 18 0> /* D14 */ + , <15 0 &arduino_header 19 0> /* D15 */ + ; + }; + + pro_micro_a: connector_a { + compatible = "arduino-pro-micro"; + #gpio-cells = <2>; + gpio-map-mask = <0xffffffff 0xffffffc0>; + gpio-map-pass-thru = <0 0x3f>; + gpio-map + = <0 0 &arduino_header 0 0> /* A0 */ + , <1 0 &arduino_header 1 0> /* A1 */ + , <2 0 &arduino_header 2 0> /* A2 */ + , <3 0 &arduino_header 3 0> /* A3 */ + ; + }; +}; + +pro_micro_i2c: &arduino_i2c {}; +pro_micro_spi: &arduino_spi {}; +pro_micro_serial: &arduino_serial {}; diff --git a/zmk/app/include/drivers/behavior.h b/zmk/app/include/drivers/behavior.h new file mode 100644 index 00000000..cf259b13 --- /dev/null +++ b/zmk/app/include/drivers/behavior.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include +#include +#include + +/** + * @cond INTERNAL_HIDDEN + * + * Behavior driver API definition and system call entry points. + * + * (Internal use only.) + */ + +typedef int (*behavior_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event); +typedef int (*behavior_sensor_keymap_binding_callback_t)(struct zmk_behavior_binding *binding, + struct device *sensor); + +__subsystem struct behavior_driver_api { + behavior_keymap_binding_callback_t binding_pressed; + behavior_keymap_binding_callback_t binding_released; + behavior_sensor_keymap_binding_callback_t sensor_binding_triggered; +}; +/** + * @endcond + */ + +/** + * @brief Handle the keymap binding being pressed + * @param dev Pointer to the device structure for the driver instance. + * @param param1 User parameter specified at time of behavior binding. + * @param param2 User parameter specified at time of behavior binding. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +__syscall int behavior_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event); + +static inline int z_impl_behavior_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->driver_api; + + if (api->binding_pressed == NULL) { + return -ENOTSUP; + } + + return api->binding_pressed(binding, event); +} + +/** + * @brief Handle the assigned position being pressed + * @param dev Pointer to the device structure for the driver instance. + * @param param1 User parameter specified at time of behavior assignment. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +__syscall int behavior_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event); + +static inline int z_impl_behavior_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->driver_api; + + if (api->binding_released == NULL) { + return -ENOTSUP; + } + + return api->binding_released(binding, event); +} + +/** + * @brief Handle the a sensor keymap binding being triggered + * @param dev Pointer to the device structure for the driver instance. + * @param sensor Pointer to the sensor device structure for the sensor driver instance. + * @param param1 User parameter specified at time of behavior binding. + * @param param2 User parameter specified at time of behavior binding. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +__syscall int behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, + struct device *sensor); + +static inline int +z_impl_behavior_sensor_keymap_binding_triggered(struct zmk_behavior_binding *binding, + struct device *sensor) { + struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_driver_api *api = (const struct behavior_driver_api *)dev->driver_api; + + if (api->sensor_binding_triggered == NULL) { + return -ENOTSUP; + } + + return api->sensor_binding_triggered(binding, sensor); +} + +/** + * @} + */ + +#include diff --git a/zmk/app/include/drivers/ext_power.h b/zmk/app/include/drivers/ext_power.h new file mode 100644 index 00000000..6c1923e8 --- /dev/null +++ b/zmk/app/include/drivers/ext_power.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @cond INTERNAL_HIDDEN + * + * Behavior driver API definition and system call entry points. + * + * (Internal use only.) + */ + +typedef int (*ext_power_enable_t)(struct device *dev); +typedef int (*ext_power_disable_t)(struct device *dev); +typedef int (*ext_power_get_t)(struct device *dev); + +__subsystem struct ext_power_api { + ext_power_enable_t enable; + ext_power_disable_t disable; + ext_power_get_t get; +}; +/** + * @endcond + */ + +/** + * @brief Enable the external power output + * @param dev Pointer to the device structure for the driver instance. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +__syscall int ext_power_enable(struct device *dev); + +static inline int z_impl_ext_power_enable(struct device *dev) { + const struct ext_power_api *api = (const struct ext_power_api *)dev->driver_api; + + if (api->enable == NULL) { + return -ENOTSUP; + } + + return api->enable(dev); +} + +/** + * @brief Disable the external power output + * @param dev Pointer to the device structure for the driver instance. + * + * @retval 0 If successful. + * @retval Negative errno code if failure. + */ +__syscall int ext_power_disable(struct device *dev); + +static inline int z_impl_ext_power_disable(struct device *dev) { + const struct ext_power_api *api = (const struct ext_power_api *)dev->driver_api; + + if (api->disable == NULL) { + return -ENOTSUP; + } + + return api->disable(dev); +} + +/** + * @brief Get the current status of the external power output + * @param dev Pointer to the device structure for the driver instance. + * + * @retval 0 If ext power is disabled. + * @retval 1 if ext power is enabled. + * @retval Negative errno code if failure. + */ +__syscall int ext_power_get(struct device *dev); + +static inline int z_impl_ext_power_get(struct device *dev) { + const struct ext_power_api *api = (const struct ext_power_api *)dev->driver_api; + + if (api->get == NULL) { + return -ENOTSUP; + } + + return api->get(dev); +} + +#ifdef __cplusplus +} +#endif + +/** + * @} + */ + +#include diff --git a/zmk/app/include/dt-bindings/zmk/bt.h b/zmk/app/include/dt-bindings/zmk/bt.h new file mode 100644 index 00000000..8ca10606 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/bt.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define BT_CLR_CMD 0 +#define BT_NXT_CMD 1 +#define BT_PRV_CMD 2 +#define BT_SEL_CMD 3 +// #define BT_FULL_RESET_CMD 4 + +/* +Note: Some future commands will include additional parameters, so we +defines these aliases up front. +*/ + +#define BT_CLR BT_CLR_CMD 0 +#define BT_NXT BT_NXT_CMD 0 +#define BT_PRV BT_PRV_CMD 0 +#define BT_SEL BT_SEL_CMD diff --git a/zmk/app/include/dt-bindings/zmk/ext_power.h b/zmk/app/include/dt-bindings/zmk/ext_power.h new file mode 100644 index 00000000..2a3e8460 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/ext_power.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define EXT_POWER_OFF_CMD 0 +#define EXT_POWER_ON_CMD 1 +#define EXT_POWER_TOGGLE_CMD 2 + +#define EP_ON EXT_POWER_ON_CMD +#define EP_OFF EXT_POWER_OFF_CMD +#define EP_TOG EXT_POWER_TOGGLE_CMD diff --git a/zmk/app/include/dt-bindings/zmk/hid_usage.h b/zmk/app/include/dt-bindings/zmk/hid_usage.h new file mode 100644 index 00000000..0555f004 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/hid_usage.h @@ -0,0 +1,2566 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + * + * Based on HID Usage Tables 1.21, + * Copyright © 1996-2020, USB Implementers Forum, + * https://www.usb.org/sites/default/files/hut1_21.pdf + */ + +#pragma once + +/* Page 0x01: Generic Desktop */ +#define HID_USAGE_GD_UNDEFINED (0x00) +#define HID_USAGE_GD_POINTER (0x01) // CP +#define HID_USAGE_GD_MOUSE (0x02) // CA +#define HID_USAGE_GD_JOYSTICK (0x04) // CA +#define HID_USAGE_GD_GAMEPAD (0x05) // CA +#define HID_USAGE_GD_KEYBOARD (0x06) // CA +#define HID_USAGE_GD_KEYPAD (0x07) // CA +#define HID_USAGE_GD_MULTI_AXIS_CONTROLLER (0x08) // CA +#define HID_USAGE_GD_TABLET_PC_SYSTEM_CONTROLS (0x09) // CA +#define HID_USAGE_GD_WATER_COOLING_DEVICE (0x0A) // CA +#define HID_USAGE_GD_COMPUTER_CHASSIS_DEVICE (0x0B) // CA +#define HID_USAGE_GD_WIRELESS_RADIO_CONTROLS (0x0C) // CA +#define HID_USAGE_GD_PORTABLE_DEVICE_CONTROL (0x0D) // CA +#define HID_USAGE_GD_SYSTEM_MULTI_AXIS_CONTROLLER (0x0E) // CA +#define HID_USAGE_GD_SPATIAL_CONTROLLER (0x0F) // CA +#define HID_USAGE_GD_ASSISTIVE_CONTROL (0x10) // CA +#define HID_USAGE_GD_DEVICE_DOCK (0x11) // CA +#define HID_USAGE_GD_DOCKABLE_DEVICE (0x12) // CA +#define HID_USAGE_GD_X (0x30) // DV +#define HID_USAGE_GD_Y (0x31) // DV +#define HID_USAGE_GD_Z (0x32) // DV +#define HID_USAGE_GD_RX (0x33) // DV +#define HID_USAGE_GD_RY (0x34) // DV +#define HID_USAGE_GD_RZ (0x35) // DV +#define HID_USAGE_GD_SLIDER (0x36) // DV +#define HID_USAGE_GD_DIAL (0x37) // DV +#define HID_USAGE_GD_WHEEL (0x38) // DV +#define HID_USAGE_GD_HAT_SWITCH (0x39) // DV +#define HID_USAGE_GD_COUNTED_BUFFER (0x3A) // CL +#define HID_USAGE_GD_BYTE_COUNT (0x3B) // DV +#define HID_USAGE_GD_MOTION_WAKEUP (0x3C) // OSC, DF +#define HID_USAGE_GD_START (0x3D) // OOC +#define HID_USAGE_GD_SELECT (0x3E) // OOC +#define HID_USAGE_GD_VX (0x40) // DV +#define HID_USAGE_GD_VY (0x41) // DV +#define HID_USAGE_GD_VZ (0x42) // DV +#define HID_USAGE_GD_VBRX (0x43) // DV +#define HID_USAGE_GD_VBRY (0x44) // DV +#define HID_USAGE_GD_VBRZ (0x45) // DV +#define HID_USAGE_GD_VNO (0x46) // DV +#define HID_USAGE_GD_FEATURE_NOTIFICATION (0x47) // DV, DF +#define HID_USAGE_GD_RESOLUTION_MULTIPLIER (0x48) // DV +#define HID_USAGE_GD_QX (0x49) // DV +#define HID_USAGE_GD_QY (0x4A) // DV +#define HID_USAGE_GD_QZ (0x4B) // DV +#define HID_USAGE_GD_QW (0x4C) // DV +#define HID_USAGE_GD_SYSTEM_CONTROL (0x80) // CA +#define HID_USAGE_GD_SYSTEM_POWER_DOWN (0x81) // OSC +#define HID_USAGE_GD_SYSTEM_SLEEP (0x82) // OSC +#define HID_USAGE_GD_SYSTEM_WAKE_UP (0x83) // OSC +#define HID_USAGE_GD_SYSTEM_CONTEXT_MENU (0x84) // OSC +#define HID_USAGE_GD_SYSTEM_MAIN_MENU (0x85) // OSC +#define HID_USAGE_GD_SYSTEM_APP_MENU (0x86) // OSC +#define HID_USAGE_GD_SYSTEM_MENU_HELP (0x87) // OSC +#define HID_USAGE_GD_SYSTEM_MENU_EXIT (0x88) // OSC +#define HID_USAGE_GD_SYSTEM_MENU_SELECT (0x89) // OSC +#define HID_USAGE_GD_SYSTEM_MENU_RIGHT (0x8A) // RTC +#define HID_USAGE_GD_SYSTEM_MENU_LEFT (0x8B) // RTC +#define HID_USAGE_GD_SYSTEM_MENU_UP (0x8C) // RTC +#define HID_USAGE_GD_SYSTEM_MENU_DOWN (0x8D) // RTC +#define HID_USAGE_GD_SYSTEM_COLD_RESTART (0x8E) // OSC +#define HID_USAGE_GD_SYSTEM_WARM_RESTART (0x8F) // OSC +#define HID_USAGE_GD_D_PAD_UP (0x90) // OOC +#define HID_USAGE_GD_D_PAD_DOWN (0x91) // OOC +#define HID_USAGE_GD_D_PAD_RIGHT (0x92) // OOC +#define HID_USAGE_GD_D_PAD_LEFT (0x93) // OOC +#define HID_USAGE_GD_INDEX_TRIGGER (0x94) // MC, DV +#define HID_USAGE_GD_PALM_TRIGGER (0x95) // MC, DV +#define HID_USAGE_GD_THUMBSTICK (0x96) // CP +#define HID_USAGE_GD_SYSTEM_FUNCTION_SHIFT (0x97) // MC +#define HID_USAGE_GD_SYSTEM_FUNCTION_SHIFT_LOCK (0x98) // OOC +#define HID_USAGE_GD_SYSTEM_FUNCTION_SHIFT_LOCK_INDICATOR (0x99) // DV +#define HID_USAGE_GD_SYSTEM_DISMISS_NOTIFICATION (0x9A) // OSC +#define HID_USAGE_GD_SYSTEM_DO_NOT_DISTURB (0x9B) // OOC +#define HID_USAGE_GD_SYSTEM_DOCK (0xA0) // OSC +#define HID_USAGE_GD_SYSTEM_UNDOCK (0xA1) // OSC +#define HID_USAGE_GD_SYSTEM_SETUP (0xA2) // OSC +#define HID_USAGE_GD_SYSTEM_BREAK (0xA3) // OSC +#define HID_USAGE_GD_SYSTEM_DEBUGGER_BREAK (0xA4) // OSC +#define HID_USAGE_GD_APPLICATION_BREAK (0xA5) // OSC +#define HID_USAGE_GD_APPLICATION_DEBUGGER_BREAK (0xA6) // OSC +#define HID_USAGE_GD_SYSTEM_SPEAKER_MUTE (0xA7) // OSC +#define HID_USAGE_GD_SYSTEM_HIBERNATE (0xA8) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_INVERT (0xB0) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_INTERNAL (0xB1) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_EXTERNAL (0xB2) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_BOTH (0xB3) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_DUAL (0xB4) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_TOGGLE_INT_EXT_MODE (0xB5) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_SWAP_PRIMARY_SECONDARY (0xB6) // OSC +#define HID_USAGE_GD_SYSTEM_DISPLAY_TOGGLE_LCD_AUTOSCALE (0xB7) // OSC +#define HID_USAGE_GD_SENSOR_ZONE (0xC0) // CL +#define HID_USAGE_GD_RPM (0xC1) // DV +#define HID_USAGE_GD_COOLANT_LEVEL (0xC2) // DV +#define HID_USAGE_GD_COOLANT_CRITICAL_LEVEL (0xC3) // SV +#define HID_USAGE_GD_COOLANT_PUMP (0xC4) // US +#define HID_USAGE_GD_CHASSIS_ENCLOSURE (0xC5) // CL +#define HID_USAGE_GD_WIRELESS_RADIO_BUTTON (0xC6) // OOC +#define HID_USAGE_GD_WIRELESS_RADIO_LED (0xC7) // OOC +#define HID_USAGE_GD_WIRELESS_RADIO_SLIDER_SWITCH (0xC8) // OOC +#define HID_USAGE_GD_SYSTEM_DISPLAY_ROTATION_LOCK_BUTTON (0xC9) // OOC +#define HID_USAGE_GD_SYSTEM_DISPLAY_ROTATION_LOCK_SLIDER_SWITCH (0xCA) // OOC +#define HID_USAGE_GD_CONTROL_ENABLE (0xCB) // DF +#define HID_USAGE_GD_DOCKABLE_DEVICE_UNIQUE_ID (0xD0) // DV +#define HID_USAGE_GD_DOCKABLE_DEVICE_VENDOR_ID (0xD1) // DV +#define HID_USAGE_GD_DOCKABLE_DEVICE_PRIMARY_USAGE_PAGE (0xD2) // DV +#define HID_USAGE_GD_DOCKABLE_DEVICE_PRIMARY_USAGE_ID (0xD3) // DV +#define HID_USAGE_GD_DOCKABLE_DEVICE_DOCKING_STATE (0xD4) // DF +#define HID_USAGE_GD_DOCKABLE_DEVICE_DISPLAY_OCCLUSION (0xD5) // CL +#define HID_USAGE_GD_DOCKABLE_DEVICE_OBJECT_TYPE (0xD6) // DV + +/* Page 0x02: Simulation Controls */ +#define HID_USAGE_SIM_UNDEFINED (0x00) +#define HID_USAGE_SIM_FLIGHT_SIMULATION_DEVICE (0x01) // CA +#define HID_USAGE_SIM_AUTOMOBILE_SIMULATION_DEVICE (0x02) // CA +#define HID_USAGE_SIM_TANK_SIMULATION_DEVICE (0x03) // CA +#define HID_USAGE_SIM_SPACESHIP_SIMULATION_DEVICE (0x04) // CA +#define HID_USAGE_SIM_SUBMARINE_SIMULATION_DEVICE (0x05) // CA +#define HID_USAGE_SIM_SAILING_SIMULATION_DEVICE (0x06) // CA +#define HID_USAGE_SIM_MOTORCYCLE_SIMULATION_DEVICE (0x07) // CA +#define HID_USAGE_SIM_SPORTS_SIMULATION_DEVICE (0x08) // CA +#define HID_USAGE_SIM_AIRPLANE_SIMULATION_DEVICE (0x09) // CA +#define HID_USAGE_SIM_HELICOPTER_SIMULATION_DEVICE (0x0A) // CA +#define HID_USAGE_SIM_MAGIC_CARPET_SIMULATION_DEVICE (0x0B) // CA +#define HID_USAGE_SIM_BICYCLE_SIMULATION_DEVICE (0x0C) // CA +#define HID_USAGE_SIM_FLIGHT_CONTROL_STICK (0x20) // CA +#define HID_USAGE_SIM_FLIGHT_STICK (0x21) // CA +#define HID_USAGE_SIM_CYCLIC_CONTROL (0x22) // CP +#define HID_USAGE_SIM_CYCLIC_TRIM (0x23) // CP +#define HID_USAGE_SIM_FLIGHT_YOKE (0x24) // CA +#define HID_USAGE_SIM_TRACK_CONTROL (0x25) // CP +#define HID_USAGE_SIM_AILERON (0xB0) // DV +#define HID_USAGE_SIM_AILERON_TRIM (0xB1) // DV +#define HID_USAGE_SIM_ANTI_TORQUE_CONTROL (0xB2) // DV +#define HID_USAGE_SIM_AUTOPILOT_ENABLE (0xB3) // OOC +#define HID_USAGE_SIM_CHAFF_RELEASE (0xB4) // OSC +#define HID_USAGE_SIM_COLLECTIVE_CONTROL (0xB5) // DV +#define HID_USAGE_SIM_DIVE_BRAKE (0xB6) // DV +#define HID_USAGE_SIM_ELECTRONIC_COUNTERMEASURES (0xB7) // OOC +#define HID_USAGE_SIM_ELEVATOR (0xB8) // DV +#define HID_USAGE_SIM_ELEVATOR_TRIM (0xB9) // DV +#define HID_USAGE_SIM_RUDDER (0xBA) // DV +#define HID_USAGE_SIM_THROTTLE (0xBB) // DV +#define HID_USAGE_SIM_FLIGHT_COMMUNICATIONS (0xBC) // OOC +#define HID_USAGE_SIM_FLARE_RELEASE (0xBD) // OSC +#define HID_USAGE_SIM_LANDING_GEAR (0xBE) // OOC +#define HID_USAGE_SIM_TOE_BRAKE (0xBF) // DV +#define HID_USAGE_SIM_TRIGGER (0xC0) // MC +#define HID_USAGE_SIM_WEAPONS_ARM (0xC1) // OOC +#define HID_USAGE_SIM_WEAPONS_SELECT (0xC2) // OSC +#define HID_USAGE_SIM_WING_FLAPS (0xC3) // DV +#define HID_USAGE_SIM_ACCELERATOR (0xC4) // DV +#define HID_USAGE_SIM_BRAKE (0xC5) // DV +#define HID_USAGE_SIM_CLUTCH (0xC6) // DV +#define HID_USAGE_SIM_SHIFTER (0xC7) // DV +#define HID_USAGE_SIM_STEERING (0xC8) // DV +#define HID_USAGE_SIM_TURRET_DIRECTION (0xC9) // DV +#define HID_USAGE_SIM_BARREL_ELEVATION (0xCA) // DV +#define HID_USAGE_SIM_DIVE_PLANE (0xCB) // DV +#define HID_USAGE_SIM_BALLAST (0xCC) // DV +#define HID_USAGE_SIM_BICYCLE_CRANK (0xCD) // DV +#define HID_USAGE_SIM_HANDLE_BARS (0xCE) // DV +#define HID_USAGE_SIM_FRONT_BRAKE (0xCF) // DV +#define HID_USAGE_SIM_REAR_BRAKE (0xD0) // DV + +/* Page 0x03: VR Controls */ +#define HID_USAGE_VR_UNDEFINED (0x00) +#define HID_USAGE_VR_BELT (0x01) // CA +#define HID_USAGE_VR_BODY_SUIT (0x02) // CA +#define HID_USAGE_VR_FLEXOR (0x03) // CP +#define HID_USAGE_VR_GLOVE (0x04) // CA +#define HID_USAGE_VR_HEAD_TRACKER (0x05) // CP +#define HID_USAGE_VR_HEAD_MOUNTED_DISPLAY (0x06) // CA +#define HID_USAGE_VR_HAND_TRACKER (0x07) // CA +#define HID_USAGE_VR_OCULOMETER (0x08) // CA +#define HID_USAGE_VR_VEST (0x09) // CA +#define HID_USAGE_VR_ANIMATRONIC_DEVICE (0x0A) // CA +#define HID_USAGE_VR_STEREO_ENABLE (0x20) // OOC +#define HID_USAGE_VR_DISPLAY_ENABLE (0x21) // OOC + +/* Page 0x04: Sport Controls */ +#define HID_USAGE_SPORT_UNDEFINED (0x00) +#define HID_USAGE_SPORT_BASEBALL_BAT (0x01) // CA +#define HID_USAGE_SPORT_GOLF_CLUB (0x02) // CA +#define HID_USAGE_SPORT_ROWING_MACHINE (0x03) // CA +#define HID_USAGE_SPORT_TREADMILL (0x04) // CA +#define HID_USAGE_SPORT_OAR (0x30) // DV +#define HID_USAGE_SPORT_SLOPE (0x31) // DV +#define HID_USAGE_SPORT_RATE (0x32) // DV +#define HID_USAGE_SPORT_STICK_SPEED (0x33) // DV +#define HID_USAGE_SPORT_STICK_FACE_ANGLE (0x34) // DV +#define HID_USAGE_SPORT_STICK_HEEL_TOE (0x35) // DV +#define HID_USAGE_SPORT_STICK_FOLLOW_THROUGH (0x36) // DV +#define HID_USAGE_SPORT_STICK_TEMPO (0x37) // DV +#define HID_USAGE_SPORT_STICK_TYPE (0x38) // NAry +#define HID_USAGE_SPORT_STICK_HEIGHT (0x39) // DV +#define HID_USAGE_SPORT_PUTTER (0x50) // Sel +#define HID_USAGE_SPORT_1_IRON (0x51) // Sel +#define HID_USAGE_SPORT_2_IRON (0x52) // Sel +#define HID_USAGE_SPORT_3_IRON (0x53) // Sel +#define HID_USAGE_SPORT_4_IRON (0x54) // Sel +#define HID_USAGE_SPORT_5_IRON (0x55) // Sel +#define HID_USAGE_SPORT_6_IRON (0x56) // Sel +#define HID_USAGE_SPORT_7_IRON (0x57) // Sel +#define HID_USAGE_SPORT_8_IRON (0x58) // Sel +#define HID_USAGE_SPORT_9_IRON (0x59) // Sel +#define HID_USAGE_SPORT_10_IRON (0x5A) // Sel +#define HID_USAGE_SPORT_11_IRON (0x5B) // Sel +#define HID_USAGE_SPORT_SAND_WEDGE (0x5C) // Sel +#define HID_USAGE_SPORT_LOFT_WEDGE (0x5D) // Sel +#define HID_USAGE_SPORT_POWER_WEDGE (0x5E) // Sel +#define HID_USAGE_SPORT_1_WOOD (0x5F) // Sel +#define HID_USAGE_SPORT_3_WOOD (0x60) // Sel +#define HID_USAGE_SPORT_5_WOOD (0x61) // Sel +#define HID_USAGE_SPORT_7_WOOD (0x62) // Sel +#define HID_USAGE_SPORT_9_WOOD (0x63) // Sel + +/* Page 0x05: Game Controls */ +#define HID_USAGE_GAME_UNDEFINED (0x00) +#define HID_USAGE_GAME_3D_GAME_CONTROLLER (0x01) // CA +#define HID_USAGE_GAME_PINBALL_DEVICE (0x02) // CA +#define HID_USAGE_GAME_GUN_DEVICE (0x03) // CA +#define HID_USAGE_GAME_POINT_OF_VIEW (0x20) // CP +#define HID_USAGE_GAME_TURN_RIGHT_LEFT (0x21) // DV +#define HID_USAGE_GAME_PITCH_FORWARD_BACKWARD (0x22) // DV +#define HID_USAGE_GAME_ROLL_RIGHT_LEFT (0x23) // DV +#define HID_USAGE_GAME_MOVE_RIGHT_LEFT (0x24) // DV +#define HID_USAGE_GAME_MOVE_FORWARD_BACKWARD (0x25) // DV +#define HID_USAGE_GAME_MOVE_UP_DOWN (0x26) // DV +#define HID_USAGE_GAME_LEAN_RIGHT_LEFT (0x27) // DV +#define HID_USAGE_GAME_LEAN_FORWARD_BACKWARD (0x28) // DV +#define HID_USAGE_GAME_HEIGHT_OF_POV (0x29) // DV +#define HID_USAGE_GAME_FLIPPER (0x2A) // MC +#define HID_USAGE_GAME_SECONDARY_FLIPPER (0x2B) // MC +#define HID_USAGE_GAME_BUMP (0x2C) // MC +#define HID_USAGE_GAME_NEW_GAME (0x2D) // OSC +#define HID_USAGE_GAME_SHOOT_BALL (0x2E) // OSC +#define HID_USAGE_GAME_PLAYER (0x2F) // OSC +#define HID_USAGE_GAME_GUN_BOLT (0x30) // OOC +#define HID_USAGE_GAME_GUN_CLIP (0x31) // OOC +#define HID_USAGE_GAME_GUN_SELECTOR (0x32) // NAry +#define HID_USAGE_GAME_GUN_SINGLE_SHOT (0x33) // Sel +#define HID_USAGE_GAME_GUN_BURST (0x34) // Sel +#define HID_USAGE_GAME_GUN_AUTOMATIC (0x35) // Sel +#define HID_USAGE_GAME_GUN_SAFETY (0x36) // OOC +#define HID_USAGE_GAME_GAMEPAD_FIRE_JUMP (0x37) // CL +#define HID_USAGE_GAME_GAMEPAD_TRIGGER (0x39) // CL +#define HID_USAGE_GAME_FORM_FITTING_GAMEPAD (0x3A) // SF + +/* Page 0x06: Generic Device Controls */ +#define HID_USAGE_GDV_UNDEFINED (0x00) +#define HID_USAGE_GDV_BACKGROUND_NONUSER_CONTROLS (0x01) // CA +#define HID_USAGE_GDV_BATTERY_STRENGTH (0x20) // DV +#define HID_USAGE_GDV_WIRELESS_CHANNEL (0x21) // DV +#define HID_USAGE_GDV_WIRELESS_ID (0x22) // DV +#define HID_USAGE_GDV_DISCOVER_WIRELESS_CONTROL (0x23) // OSC +#define HID_USAGE_GDV_SECURITY_CODE_CHARACTER_ENTERED (0x24) // OSC +#define HID_USAGE_GDV_SECURITY_CODE_CHARACTER_ERASED (0x25) // OSC +#define HID_USAGE_GDV_SECURITY_CODE_CLEARED (0x26) // OSC +#define HID_USAGE_GDV_SEQUENCE_ID (0x27) // DV +#define HID_USAGE_GDV_SEQUENCE_ID_RESET (0x28) // DF +#define HID_USAGE_GDV_RF_SIGNAL_STRENGTH (0x29) // DV +#define HID_USAGE_GDV_SOFTWARE_VERSION (0x2A) // CL +#define HID_USAGE_GDV_PROTOCOL_VERSION (0x2B) // CL +#define HID_USAGE_GDV_HARDWARE_VERSION (0x2C) // CL +#define HID_USAGE_GDV_MAJOR (0x2D) // SV +#define HID_USAGE_GDV_MINOR (0x2E) // SV +#define HID_USAGE_GDV_REVISION (0x2F) // SV +#define HID_USAGE_GDV_HANDEDNESS (0x30) // NAry +#define HID_USAGE_GDV_EITHER_HAND (0x31) // Sel +#define HID_USAGE_GDV_LEFT_HAND (0x32) // Sel +#define HID_USAGE_GDV_RIGHT_HAND (0x33) // Sel +#define HID_USAGE_GDV_BOTH_HANDS (0x34) // Sel +#define HID_USAGE_GDV_GRIP_POSE_OFFSET (0x40) // CP +#define HID_USAGE_GDV_POINTER_POSE_OFFSET (0x41) // CP + +/* Page 0x07: Keyboard/Keypad */ +#define HID_USAGE_KEY_KEYBOARD_ERRORROLLOVER (0x01) // Sel +#define HID_USAGE_KEY_KEYBOARD_POSTFAIL (0x02) // Sel +#define HID_USAGE_KEY_KEYBOARD_ERRORUNDEFINED (0x03) // Sel +#define HID_USAGE_KEY_KEYBOARD_A (0x04) // Sel +#define HID_USAGE_KEY_KEYBOARD_B (0x05) // Sel +#define HID_USAGE_KEY_KEYBOARD_C (0x06) // Sel +#define HID_USAGE_KEY_KEYBOARD_D (0x07) // Sel +#define HID_USAGE_KEY_KEYBOARD_E (0x08) // Sel +#define HID_USAGE_KEY_KEYBOARD_F (0x09) // Sel +#define HID_USAGE_KEY_KEYBOARD_G (0x0A) // Sel +#define HID_USAGE_KEY_KEYBOARD_H (0x0B) // Sel +#define HID_USAGE_KEY_KEYBOARD_I (0x0C) // Sel +#define HID_USAGE_KEY_KEYBOARD_J (0x0D) // Sel +#define HID_USAGE_KEY_KEYBOARD_K (0x0E) // Sel +#define HID_USAGE_KEY_KEYBOARD_L (0x0F) // Sel +#define HID_USAGE_KEY_KEYBOARD_M (0x10) // Sel +#define HID_USAGE_KEY_KEYBOARD_N (0x11) // Sel +#define HID_USAGE_KEY_KEYBOARD_O (0x12) // Sel +#define HID_USAGE_KEY_KEYBOARD_P (0x13) // Sel +#define HID_USAGE_KEY_KEYBOARD_Q (0x14) // Sel +#define HID_USAGE_KEY_KEYBOARD_R (0x15) // Sel +#define HID_USAGE_KEY_KEYBOARD_S (0x16) // Sel +#define HID_USAGE_KEY_KEYBOARD_T (0x17) // Sel +#define HID_USAGE_KEY_KEYBOARD_U (0x18) // Sel +#define HID_USAGE_KEY_KEYBOARD_V (0x19) // Sel +#define HID_USAGE_KEY_KEYBOARD_W (0x1A) // Sel +#define HID_USAGE_KEY_KEYBOARD_X (0x1B) // Sel +#define HID_USAGE_KEY_KEYBOARD_Y (0x1C) // Sel +#define HID_USAGE_KEY_KEYBOARD_Z (0x1D) // Sel +#define HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION (0x1E) // Sel +#define HID_USAGE_KEY_KEYBOARD_2_AND_AT (0x1F) // Sel +#define HID_USAGE_KEY_KEYBOARD_3_AND_HASH (0x20) // Sel +#define HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR (0x21) // Sel +#define HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT (0x22) // Sel +#define HID_USAGE_KEY_KEYBOARD_6_AND_CARET (0x23) // Sel +#define HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND (0x24) // Sel +#define HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK (0x25) // Sel +#define HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS (0x26) // Sel +#define HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS (0x27) // Sel +#define HID_USAGE_KEY_KEYBOARD_RETURN_ENTER (0x28) // Sel +#define HID_USAGE_KEY_KEYBOARD_ESCAPE (0x29) // Sel +#define HID_USAGE_KEY_KEYBOARD_DELETE_BACKSPACE (0x2A) // Sel +#define HID_USAGE_KEY_KEYBOARD_TAB (0x2B) // Sel +#define HID_USAGE_KEY_KEYBOARD_SPACEBAR (0x2C) // Sel +#define HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE (0x2D) // Sel +#define HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS (0x2E) // Sel +#define HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE (0x2F) // Sel +#define HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE (0x30) // Sel +#define HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE (0x31) // Sel +#define HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE (0x32) // Sel +#define HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON (0x33) // Sel +#define HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE (0x34) // Sel +#define HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE (0x35) // Sel +#define HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN (0x36) // Sel +#define HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN (0x37) // Sel +#define HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK (0x38) // Sel +#define HID_USAGE_KEY_KEYBOARD_CAPS_LOCK (0x39) // Sel +#define HID_USAGE_KEY_KEYBOARD_F1 (0x3A) // Sel +#define HID_USAGE_KEY_KEYBOARD_F2 (0x3B) // Sel +#define HID_USAGE_KEY_KEYBOARD_F3 (0x3C) // Sel +#define HID_USAGE_KEY_KEYBOARD_F4 (0x3D) // Sel +#define HID_USAGE_KEY_KEYBOARD_F5 (0x3E) // Sel +#define HID_USAGE_KEY_KEYBOARD_F6 (0x3F) // Sel +#define HID_USAGE_KEY_KEYBOARD_F7 (0x40) // Sel +#define HID_USAGE_KEY_KEYBOARD_F8 (0x41) // Sel +#define HID_USAGE_KEY_KEYBOARD_F9 (0x42) // Sel +#define HID_USAGE_KEY_KEYBOARD_F10 (0x43) // Sel +#define HID_USAGE_KEY_KEYBOARD_F11 (0x44) // Sel +#define HID_USAGE_KEY_KEYBOARD_F12 (0x45) // Sel +#define HID_USAGE_KEY_KEYBOARD_PRINTSCREEN (0x46) // Sel +#define HID_USAGE_KEY_KEYBOARD_SCROLL_LOCK (0x47) // Sel +#define HID_USAGE_KEY_KEYBOARD_PAUSE (0x48) // Sel +#define HID_USAGE_KEY_KEYBOARD_INSERT (0x49) // Sel +#define HID_USAGE_KEY_KEYBOARD_HOME (0x4A) // Sel +#define HID_USAGE_KEY_KEYBOARD_PAGEUP (0x4B) // Sel +#define HID_USAGE_KEY_KEYBOARD_DELETE_FORWARD (0x4C) // Sel +#define HID_USAGE_KEY_KEYBOARD_END (0x4D) // Sel +#define HID_USAGE_KEY_KEYBOARD_PAGEDOWN (0x4E) // Sel +#define HID_USAGE_KEY_KEYBOARD_RIGHTARROW (0x4F) // Sel +#define HID_USAGE_KEY_KEYBOARD_LEFTARROW (0x50) // Sel +#define HID_USAGE_KEY_KEYBOARD_DOWNARROW (0x51) // Sel +#define HID_USAGE_KEY_KEYBOARD_UPARROW (0x52) // Sel +#define HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR (0x53) // Sel +#define HID_USAGE_KEY_KEYPAD_SLASH (0x54) // Sel +#define HID_USAGE_KEY_KEYPAD_ASTERISK (0x55) // Sel +#define HID_USAGE_KEY_KEYPAD_MINUS (0x56) // Sel +#define HID_USAGE_KEY_KEYPAD_PLUS (0x57) // Sel +#define HID_USAGE_KEY_KEYPAD_ENTER (0x58) // Sel +#define HID_USAGE_KEY_KEYPAD_1_AND_END (0x59) // Sel +#define HID_USAGE_KEY_KEYPAD_2_AND_DOWN_ARROW (0x5A) // Sel +#define HID_USAGE_KEY_KEYPAD_3_AND_PAGEDN (0x5B) // Sel +#define HID_USAGE_KEY_KEYPAD_4_AND_LEFT_ARROW (0x5C) // Sel +#define HID_USAGE_KEY_KEYPAD_5 (0x5D) // Sel +#define HID_USAGE_KEY_KEYPAD_6_AND_RIGHT_ARROW (0x5E) // Sel +#define HID_USAGE_KEY_KEYPAD_7_AND_HOME (0x5F) // Sel +#define HID_USAGE_KEY_KEYPAD_8_AND_UP_ARROW (0x60) // Sel +#define HID_USAGE_KEY_KEYPAD_9_AND_PAGEUP (0x61) // Sel +#define HID_USAGE_KEY_KEYPAD_0_AND_INSERT (0x62) // Sel +#define HID_USAGE_KEY_KEYPAD_PERIOD_AND_DELETE (0x63) // Sel +#define HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE (0x64) // Sel +#define HID_USAGE_KEY_KEYBOARD_APPLICATION (0x65) // Sel +#define HID_USAGE_KEY_KEYBOARD_POWER (0x66) // Sel +#define HID_USAGE_KEY_KEYPAD_EQUAL (0x67) // Sel +#define HID_USAGE_KEY_KEYBOARD_F13 (0x68) // Sel +#define HID_USAGE_KEY_KEYBOARD_F14 (0x69) // Sel +#define HID_USAGE_KEY_KEYBOARD_F15 (0x6A) // Sel +#define HID_USAGE_KEY_KEYBOARD_F16 (0x6B) // Sel +#define HID_USAGE_KEY_KEYBOARD_F17 (0x6C) // Sel +#define HID_USAGE_KEY_KEYBOARD_F18 (0x6D) // Sel +#define HID_USAGE_KEY_KEYBOARD_F19 (0x6E) // Sel +#define HID_USAGE_KEY_KEYBOARD_F20 (0x6F) // Sel +#define HID_USAGE_KEY_KEYBOARD_F21 (0x70) // Sel +#define HID_USAGE_KEY_KEYBOARD_F22 (0x71) // Sel +#define HID_USAGE_KEY_KEYBOARD_F23 (0x72) // Sel +#define HID_USAGE_KEY_KEYBOARD_F24 (0x73) // Sel +#define HID_USAGE_KEY_KEYBOARD_EXECUTE (0x74) // Sel +#define HID_USAGE_KEY_KEYBOARD_HELP (0x75) // Sel +#define HID_USAGE_KEY_KEYBOARD_MENU (0x76) // Sel +#define HID_USAGE_KEY_KEYBOARD_SELECT (0x77) // Sel +#define HID_USAGE_KEY_KEYBOARD_STOP (0x78) // Sel +#define HID_USAGE_KEY_KEYBOARD_AGAIN (0x79) // Sel +#define HID_USAGE_KEY_KEYBOARD_UNDO (0x7A) // Sel +#define HID_USAGE_KEY_KEYBOARD_CUT (0x7B) // Sel +#define HID_USAGE_KEY_KEYBOARD_COPY (0x7C) // Sel +#define HID_USAGE_KEY_KEYBOARD_PASTE (0x7D) // Sel +#define HID_USAGE_KEY_KEYBOARD_FIND (0x7E) // Sel +#define HID_USAGE_KEY_KEYBOARD_MUTE (0x7F) // Sel +#define HID_USAGE_KEY_KEYBOARD_VOLUME_UP (0x80) // Sel +#define HID_USAGE_KEY_KEYBOARD_VOLUME_DOWN (0x81) // Sel +#define HID_USAGE_KEY_KEYBOARD_LOCKING_CAPS_LOCK (0x82) // Sel +#define HID_USAGE_KEY_KEYBOARD_LOCKING_NUM_LOCK (0x83) // Sel +#define HID_USAGE_KEY_KEYBOARD_LOCKING_SCROLL_LOCK (0x84) // Sel +#define HID_USAGE_KEY_KEYPAD_COMMA (0x85) // Sel +#define HID_USAGE_KEY_KEYPAD_EQUAL_SIGN (0x86) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL1 (0x87) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL2 (0x88) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL3 (0x89) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL4 (0x8A) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL5 (0x8B) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL6 (0x8C) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL7 (0x8D) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL8 (0x8E) // Sel +#define HID_USAGE_KEY_KEYBOARD_INTERNATIONAL9 (0x8F) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG1 (0x90) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG2 (0x91) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG3 (0x92) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG4 (0x93) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG5 (0x94) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG6 (0x95) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG7 (0x96) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG8 (0x97) // Sel +#define HID_USAGE_KEY_KEYBOARD_LANG9 (0x98) // Sel +#define HID_USAGE_KEY_KEYBOARD_ALTERNATE_ERASE (0x99) // Sel +#define HID_USAGE_KEY_KEYBOARD_SYSREQ_ATTENTION (0x9A) // Sel +#define HID_USAGE_KEY_KEYBOARD_CANCEL (0x9B) // Sel +#define HID_USAGE_KEY_KEYBOARD_CLEAR (0x9C) // Sel +#define HID_USAGE_KEY_KEYBOARD_PRIOR (0x9D) // Sel +#define HID_USAGE_KEY_KEYBOARD_RETURN (0x9E) // Sel +#define HID_USAGE_KEY_KEYBOARD_SEPARATOR (0x9F) // Sel +#define HID_USAGE_KEY_KEYBOARD_OUT (0xA0) // Sel +#define HID_USAGE_KEY_KEYBOARD_OPER (0xA1) // Sel +#define HID_USAGE_KEY_KEYBOARD_CLEAR_AGAIN (0xA2) // Sel +#define HID_USAGE_KEY_KEYBOARD_CRSEL_PROPS (0xA3) // Sel +#define HID_USAGE_KEY_KEYBOARD_EXSEL (0xA4) // Sel +#define HID_USAGE_KEY_KEYPAD_00 (0xB0) // Sel +#define HID_USAGE_KEY_KEYPAD_000 (0xB1) // Sel +#define HID_USAGE_KEY_THOUSANDS_SEPARATOR (0xB2) // Sel +#define HID_USAGE_KEY_DECIMAL_SEPARATOR (0xB3) // Sel +#define HID_USAGE_KEY_CURRENCY_UNIT (0xB4) // Sel +#define HID_USAGE_KEY_CURRENCY_SUB_UNIT (0xB5) // Sel +#define HID_USAGE_KEY_KEYPAD_LEFT_PARENTHESIS (0xB6) // Sel +#define HID_USAGE_KEY_KEYPAD_RIGHT_PARENTHESIS (0xB7) // Sel +#define HID_USAGE_KEY_KEYPAD_LEFT_BRACE (0xB8) // Sel +#define HID_USAGE_KEY_KEYPAD_RIGHT_BRACE (0xB9) // Sel +#define HID_USAGE_KEY_KEYPAD_TAB (0xBA) // Sel +#define HID_USAGE_KEY_KEYPAD_BACKSPACE (0xBB) // Sel +#define HID_USAGE_KEY_KEYPAD_A (0xBC) // Sel +#define HID_USAGE_KEY_KEYPAD_B (0xBD) // Sel +#define HID_USAGE_KEY_KEYPAD_C (0xBE) // Sel +#define HID_USAGE_KEY_KEYPAD_D (0xBF) // Sel +#define HID_USAGE_KEY_KEYPAD_E (0xC0) // Sel +#define HID_USAGE_KEY_KEYPAD_F (0xC1) // Sel +#define HID_USAGE_KEY_KEYPAD_XOR (0xC2) // Sel +#define HID_USAGE_KEY_KEYPAD_CARET (0xC3) // Sel +#define HID_USAGE_KEY_KEYPAD_PERCENT (0xC4) // Sel +#define HID_USAGE_KEY_KEYPAD_LESS_THAN (0xC5) // Sel +#define HID_USAGE_KEY_KEYPAD_GREATER_THAN (0xC6) // Sel +#define HID_USAGE_KEY_KEYPAD_AMPERSAND (0xC7) // Sel +#define HID_USAGE_KEY_KEYPAD_AMPERSAND_AMPERSAND (0xC8) // Sel +#define HID_USAGE_KEY_KEYPAD_PIPE (0xC9) // Sel +#define HID_USAGE_KEY_KEYPAD_PIPE_PIPE (0xCA) // Sel +#define HID_USAGE_KEY_KEYPAD_COLON (0xCB) // Sel +#define HID_USAGE_KEY_KEYPAD_HASH (0xCC) // Sel +#define HID_USAGE_KEY_KEYPAD_SPACE (0xCD) // Sel +#define HID_USAGE_KEY_KEYPAD_AT (0xCE) // Sel +#define HID_USAGE_KEY_KEYPAD_EXCLAMATION (0xCF) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_STORE (0xD0) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_RECALL (0xD1) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_CLEAR (0xD2) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_ADD (0xD3) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_SUBTRACT (0xD4) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_MULTIPLY (0xD5) // Sel +#define HID_USAGE_KEY_KEYPAD_MEMORY_DIVIDE (0xD6) // Sel +#define HID_USAGE_KEY_KEYPAD_PLUS_MINUS (0xD7) // Sel +#define HID_USAGE_KEY_KEYPAD_CLEAR (0xD8) // Sel +#define HID_USAGE_KEY_KEYPAD_CLEAR_ENTRY (0xD9) // Sel +#define HID_USAGE_KEY_KEYPAD_BINARY (0xDA) // Sel +#define HID_USAGE_KEY_KEYPAD_OCTAL (0xDB) // Sel +#define HID_USAGE_KEY_KEYPAD_DECIMAL (0xDC) // Sel +#define HID_USAGE_KEY_KEYPAD_HEXADECIMAL (0xDD) // Sel +#define HID_USAGE_KEY_KEYBOARD_LEFTCONTROL (0xE0) // DV +#define HID_USAGE_KEY_KEYBOARD_LEFTSHIFT (0xE1) // DV +#define HID_USAGE_KEY_KEYBOARD_LEFTALT (0xE2) // DV +#define HID_USAGE_KEY_KEYBOARD_LEFT_GUI (0xE3) // DV +#define HID_USAGE_KEY_KEYBOARD_RIGHTCONTROL (0xE4) // DV +#define HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT (0xE5) // DV +#define HID_USAGE_KEY_KEYBOARD_RIGHTALT (0xE6) // DV +#define HID_USAGE_KEY_KEYBOARD_RIGHT_GUI (0xE7) // DV + +/* Page 0x08: LED */ +#define HID_USAGE_LED_UNDEFINED (0x00) +#define HID_USAGE_LED_NUM_LOCK (0x01) // OOC +#define HID_USAGE_LED_CAPS_LOCK (0x02) // OOC +#define HID_USAGE_LED_SCROLL_LOCK (0x03) // OOC +#define HID_USAGE_LED_COMPOSE (0x04) // OOC +#define HID_USAGE_LED_KANA (0x05) // OOC +#define HID_USAGE_LED_POWER (0x06) // OOC +#define HID_USAGE_LED_SHIFT (0x07) // OOC +#define HID_USAGE_LED_DO_NOT_DISTURB (0x08) // OOC +#define HID_USAGE_LED_MUTE (0x09) // OOC +#define HID_USAGE_LED_TONE_ENABLE (0x0A) // OOC +#define HID_USAGE_LED_HIGH_CUT_FILTER (0x0B) // OOC +#define HID_USAGE_LED_LOW_CUT_FILTER (0x0C) // OOC +#define HID_USAGE_LED_EQUALIZER_ENABLE (0x0D) // OOC +#define HID_USAGE_LED_SOUND_FIELD_ON (0x0E) // OOC +#define HID_USAGE_LED_SURROUND_ON (0x0F) // OOC +#define HID_USAGE_LED_REPEAT (0x10) // OOC +#define HID_USAGE_LED_STEREO (0x11) // OOC +#define HID_USAGE_LED_SAMPLING_RATE_DETECT (0x12) // OOC +#define HID_USAGE_LED_SPINNING (0x13) // OOC +#define HID_USAGE_LED_CAV (0x14) // OOC +#define HID_USAGE_LED_CLV (0x15) // OOC +#define HID_USAGE_LED_RECORDING_FORMAT_DETECT (0x16) // OOC +#define HID_USAGE_LED_OFF_HOOK (0x17) // OOC +#define HID_USAGE_LED_RING (0x18) // OOC +#define HID_USAGE_LED_MESSAGE_WAITING (0x19) // OOC +#define HID_USAGE_LED_DATA_MODE (0x1A) // OOC +#define HID_USAGE_LED_BATTERY_OPERATION (0x1B) // OOC +#define HID_USAGE_LED_BATTERY_OK (0x1C) // OOC +#define HID_USAGE_LED_BATTERY_LOW (0x1D) // OOC +#define HID_USAGE_LED_SPEAKER (0x1E) // OOC +#define HID_USAGE_LED_HEAD_SET (0x1F) // OOC +#define HID_USAGE_LED_HOLD (0x20) // OOC +#define HID_USAGE_LED_MICROPHONE (0x21) // OOC +#define HID_USAGE_LED_COVERAGE (0x22) // OOC +#define HID_USAGE_LED_NIGHT_MODE (0x23) // OOC +#define HID_USAGE_LED_SEND_CALLS (0x24) // OOC +#define HID_USAGE_LED_CALL_PICKUP (0x25) // OOC +#define HID_USAGE_LED_CONFERENCE (0x26) // OOC +#define HID_USAGE_LED_STAND_BY (0x27) // OOC +#define HID_USAGE_LED_CAMERA_ON (0x28) // OOC +#define HID_USAGE_LED_CAMERA_OFF (0x29) // OOC +#define HID_USAGE_LED_ON_LINE (0x2A) // OOC +#define HID_USAGE_LED_OFF_LINE (0x2B) // OOC +#define HID_USAGE_LED_BUSY (0x2C) // OOC +#define HID_USAGE_LED_READY (0x2D) // OOC +#define HID_USAGE_LED_PAPER_OUT (0x2E) // OOC +#define HID_USAGE_LED_PAPER_JAM (0x2F) // OOC +#define HID_USAGE_LED_REMOTE (0x30) // OOC +#define HID_USAGE_LED_FORWARD (0x31) // OOC +#define HID_USAGE_LED_REVERSE (0x32) // OOC +#define HID_USAGE_LED_STOP (0x33) // OOC +#define HID_USAGE_LED_REWIND (0x34) // OOC +#define HID_USAGE_LED_FAST_FORWARD (0x35) // OOC +#define HID_USAGE_LED_PLAY (0x36) // OOC +#define HID_USAGE_LED_PAUSE (0x37) // OOC +#define HID_USAGE_LED_RECORD (0x38) // OOC +#define HID_USAGE_LED_ERROR (0x39) // OOC +#define HID_USAGE_LED_USAGE_SELECTED_INDICATOR (0x3A) // US +#define HID_USAGE_LED_USAGE_IN_USE_INDICATOR (0x3B) // US +#define HID_USAGE_LED_USAGE_MULTI_MODE_INDICATOR (0x3C) // UM +#define HID_USAGE_LED_INDICATOR_ON (0x3D) // Sel +#define HID_USAGE_LED_INDICATOR_FLASH (0x3E) // Sel +#define HID_USAGE_LED_INDICATOR_SLOW_BLINK (0x3F) // Sel +#define HID_USAGE_LED_INDICATOR_FAST_BLINK (0x40) // Sel +#define HID_USAGE_LED_INDICATOR_OFF (0x41) // Sel +#define HID_USAGE_LED_FLASH_ON_TIME (0x42) // DV +#define HID_USAGE_LED_SLOW_BLINK_ON_TIME (0x43) // DV +#define HID_USAGE_LED_SLOW_BLINK_OFF_TIME (0x44) // DV +#define HID_USAGE_LED_FAST_BLINK_ON_TIME (0x45) // DV +#define HID_USAGE_LED_FAST_BLINK_OFF_TIME (0x46) // DV +#define HID_USAGE_LED_USAGE_INDICATOR_COLOR (0x47) // UM +#define HID_USAGE_LED_INDICATOR_RED (0x48) // Sel +#define HID_USAGE_LED_INDICATOR_GREEN (0x49) // Sel +#define HID_USAGE_LED_INDICATOR_AMBER (0x4A) // Sel +#define HID_USAGE_LED_GENERIC_INDICATOR (0x4B) // OOC +#define HID_USAGE_LED_SYSTEM_SUSPEND (0x4C) // OOC +#define HID_USAGE_LED_EXTERNAL_POWER_CONNECTED (0x4D) // OOC +#define HID_USAGE_LED_INDICATOR_BLUE (0x4E) // Sel +#define HID_USAGE_LED_INDICATOR_ORANGE (0x4F) // Sel +#define HID_USAGE_LED_GOOD_STATUS (0x50) // OOC +#define HID_USAGE_LED_WARNING_STATUS (0x51) // OOC +#define HID_USAGE_LED_RGB_LED (0x52) // CL +#define HID_USAGE_LED_RED_LED_CHANNEL (0x53) // DV +#define HID_USAGE_LED_BLUE_LED_CHANNEL (0x54) // DV +#define HID_USAGE_LED_GREEN_LED_CHANNEL (0x55) // DV +#define HID_USAGE_LED_LED_INTENSITY (0x56) // DV +#define HID_USAGE_LED_PLAYER_INDICATOR (0x60) // NAry +#define HID_USAGE_LED_PLAYER_1 (0x61) // Sel +#define HID_USAGE_LED_PLAYER_2 (0x62) // Sel +#define HID_USAGE_LED_PLAYER_3 (0x63) // Sel +#define HID_USAGE_LED_PLAYER_4 (0x64) // Sel +#define HID_USAGE_LED_PLAYER_5 (0x65) // Sel +#define HID_USAGE_LED_PLAYER_6 (0x66) // Sel +#define HID_USAGE_LED_PLAYER_7 (0x67) // Sel +#define HID_USAGE_LED_PLAYER_8 (0x68) // Sel + +/* Page 0x0B: Telephony Device */ +#define HID_USAGE_TELEPHONY_UNDEFINED (0x00) +#define HID_USAGE_TELEPHONY_PHONE (0x01) // CA +#define HID_USAGE_TELEPHONY_ANSWERING_MACHINE (0x02) // CA +#define HID_USAGE_TELEPHONY_MESSAGE_CONTROLS (0x03) // CL +#define HID_USAGE_TELEPHONY_HANDSET (0x04) // CL +#define HID_USAGE_TELEPHONY_HEADSET (0x05) // CL +#define HID_USAGE_TELEPHONY_TELEPHONY_KEY_PAD (0x06) // NAry +#define HID_USAGE_TELEPHONY_PROGRAMMABLE_BUTTON (0x07) // NAry +#define HID_USAGE_TELEPHONY_HOOK_SWITCH (0x20) // OOC +#define HID_USAGE_TELEPHONY_FLASH (0x21) // MC +#define HID_USAGE_TELEPHONY_FEATURE (0x22) // OSC +#define HID_USAGE_TELEPHONY_HOLD (0x23) // OOC +#define HID_USAGE_TELEPHONY_REDIAL (0x24) // OSC +#define HID_USAGE_TELEPHONY_TRANSFER (0x25) // OSC +#define HID_USAGE_TELEPHONY_DROP (0x26) // OSC +#define HID_USAGE_TELEPHONY_PARK (0x27) // OOC +#define HID_USAGE_TELEPHONY_FORWARD_CALLS (0x28) // OOC +#define HID_USAGE_TELEPHONY_ALTERNATE_FUNCTION (0x29) // MC +#define HID_USAGE_TELEPHONY_LINE (0x2A) // OSC, NAry +#define HID_USAGE_TELEPHONY_SPEAKER_PHONE (0x2B) // OOC +#define HID_USAGE_TELEPHONY_CONFERENCE (0x2C) // OOC +#define HID_USAGE_TELEPHONY_RING_ENABLE (0x2D) // OOC +#define HID_USAGE_TELEPHONY_RING_SELECT (0x2E) // OSC +#define HID_USAGE_TELEPHONY_PHONE_MUTE (0x2F) // OOC +#define HID_USAGE_TELEPHONY_CALLER_ID (0x30) // MC +#define HID_USAGE_TELEPHONY_SEND (0x31) // OOC +#define HID_USAGE_TELEPHONY_SPEED_DIAL (0x50) // OSC +#define HID_USAGE_TELEPHONY_STORE_NUMBER (0x51) // OSC +#define HID_USAGE_TELEPHONY_RECALL_NUMBER (0x52) // OSC +#define HID_USAGE_TELEPHONY_PHONE_DIRECTORY (0x53) // OOC +#define HID_USAGE_TELEPHONY_VOICE_MAIL (0x70) // OOC +#define HID_USAGE_TELEPHONY_SCREEN_CALLS (0x71) // OOC +#define HID_USAGE_TELEPHONY_DO_NOT_DISTURB (0x72) // OOC +#define HID_USAGE_TELEPHONY_MESSAGE (0x73) // OSC +#define HID_USAGE_TELEPHONY_ANSWER_ON_OFF (0x74) // OOC +#define HID_USAGE_TELEPHONY_INSIDE_DIAL_TONE (0x90) // MC +#define HID_USAGE_TELEPHONY_OUTSIDE_DIAL_TONE (0x91) // MC +#define HID_USAGE_TELEPHONY_INSIDE_RING_TONE (0x92) // MC +#define HID_USAGE_TELEPHONY_OUTSIDE_RING_TONE (0x93) // MC +#define HID_USAGE_TELEPHONY_PRIORITY_RING_TONE (0x94) // MC +#define HID_USAGE_TELEPHONY_INSIDE_RINGBACK (0x95) // MC +#define HID_USAGE_TELEPHONY_PRIORITY_RINGBACK (0x96) // MC +#define HID_USAGE_TELEPHONY_LINE_BUSY_TONE (0x97) // MC +#define HID_USAGE_TELEPHONY_REORDER_TONE (0x98) // MC +#define HID_USAGE_TELEPHONY_CALL_WAITING_TONE (0x99) // MC +#define HID_USAGE_TELEPHONY_CONFIRMATION_TONE_1 (0x9A) // MC +#define HID_USAGE_TELEPHONY_CONFIRMATION_TONE_2 (0x9B) // MC +#define HID_USAGE_TELEPHONY_TONES_OFF (0x9C) // OOC +#define HID_USAGE_TELEPHONY_OUTSIDE_RINGBACK (0x9D) // MC +#define HID_USAGE_TELEPHONY_RINGER (0x9E) // OOC +#define HID_USAGE_TELEPHONY_PHONE_KEY_0 (0xB0) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_1 (0xB1) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_2 (0xB2) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_3 (0xB3) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_4 (0xB4) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_5 (0xB5) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_6 (0xB6) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_7 (0xB7) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_8 (0xB8) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_9 (0xB9) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_STAR (0xBA) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_POUND (0xBB) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_A (0xBC) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_B (0xBD) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_C (0xBE) // Sel +#define HID_USAGE_TELEPHONY_PHONE_KEY_D (0xBF) // Sel +#define HID_USAGE_TELEPHONY_PHONE_CALL_HISTORY_KEY (0xC0) // Sel +#define HID_USAGE_TELEPHONY_PHONE_CALLER_ID_KEY (0xC1) // Sel +#define HID_USAGE_TELEPHONY_PHONE_SETTINGS_KEY (0xC2) // Sel +#define HID_USAGE_TELEPHONY_HOST_CONTROL (0xF0) // OOC +#define HID_USAGE_TELEPHONY_HOST_AVAILABLE (0xF1) // OOC +#define HID_USAGE_TELEPHONY_HOST_CALL_ACTIVE (0xF2) // OOC +#define HID_USAGE_TELEPHONY_ACTIVATE_HANDSET_AUDIO (0xF3) // OOC +#define HID_USAGE_TELEPHONY_RING_TYPE (0xF4) // NAry +#define HID_USAGE_TELEPHONY_RE_DIALABLE_PHONE_NUMBER (0xF5) // OOC +#define HID_USAGE_TELEPHONY_STOP_RING_TONE (0xF8) // Sel +#define HID_USAGE_TELEPHONY_PSTN_RING_TONE (0xF9) // Sel +#define HID_USAGE_TELEPHONY_HOST_RING_TONE (0xFA) // Sel +#define HID_USAGE_TELEPHONY_ALERT_SOUND_ERROR (0xFB) // Sel +#define HID_USAGE_TELEPHONY_ALERT_SOUND_CONFIRM (0xFC) // Sel +#define HID_USAGE_TELEPHONY_ALERT_SOUND_NOTIFICATION (0xFD) // Sel +#define HID_USAGE_TELEPHONY_SILENT_RING (0xFE) // Sel +#define HID_USAGE_TELEPHONY_EMAIL_MESSAGE_WAITING (0x108) // OOC +#define HID_USAGE_TELEPHONY_VOICEMAIL_MESSAGE_WAITING (0x109) // OOC +#define HID_USAGE_TELEPHONY_HOST_HOLD (0x10A) // OOC +#define HID_USAGE_TELEPHONY_INCOMING_CALL_HISTORY_COUNT (0x110) // DV +#define HID_USAGE_TELEPHONY_OUTGOING_CALL_HISTORY_COUNT (0x111) // DV +#define HID_USAGE_TELEPHONY_INCOMING_CALL_HISTORY (0x112) // CL +#define HID_USAGE_TELEPHONY_OUTGOING_CALL_HISTORY (0x113) // CL +#define HID_USAGE_TELEPHONY_PHONE_LOCALE (0x114) // DV +#define HID_USAGE_TELEPHONY_PHONE_TIME_SECOND (0x140) // DV +#define HID_USAGE_TELEPHONY_PHONE_TIME_MINUTE (0x141) // DV +#define HID_USAGE_TELEPHONY_PHONE_TIME_HOUR (0x142) // DV +#define HID_USAGE_TELEPHONY_PHONE_DATE_DAY (0x143) // DV +#define HID_USAGE_TELEPHONY_PHONE_DATE_MONTH (0x144) // DV +#define HID_USAGE_TELEPHONY_PHONE_DATE_YEAR (0x145) // DV +#define HID_USAGE_TELEPHONY_HANDSET_NICKNAME (0x146) // DV +#define HID_USAGE_TELEPHONY_ADDRESS_BOOK_ID (0x147) // DV +#define HID_USAGE_TELEPHONY_CALL_DURATION (0x14A) // DV +#define HID_USAGE_TELEPHONY_DUAL_MODE_PHONE (0x14B) // CA + +/* Page 0x0C: Consumer */ +#define HID_USAGE_CONSUMER_UNDEFINED (0x00) +#define HID_USAGE_CONSUMER_CONSUMER_CONTROL (0x01) // CA +#define HID_USAGE_CONSUMER_NUMERIC_KEY_PAD (0x02) // NAry +#define HID_USAGE_CONSUMER_PROGRAMMABLE_BUTTONS (0x03) // NAry +#define HID_USAGE_CONSUMER_MICROPHONE (0x04) // CA +#define HID_USAGE_CONSUMER_HEADPHONE (0x05) // CA +#define HID_USAGE_CONSUMER_GRAPHIC_EQUALIZER (0x06) // CA +#define HID_USAGE_CONSUMER_INCREMENT10 (0x20) // OSC +#define HID_USAGE_CONSUMER_INCREMENT100 (0x21) // OSC +#define HID_USAGE_CONSUMER_AM_PM (0x22) // OSC +#define HID_USAGE_CONSUMER_POWER (0x30) // OOC +#define HID_USAGE_CONSUMER_RESET (0x31) // OSC +#define HID_USAGE_CONSUMER_SLEEP (0x32) // OSC +#define HID_USAGE_CONSUMER_SLEEP_AFTER (0x33) // OSC +#define HID_USAGE_CONSUMER_SLEEP_MODE (0x34) // RTC +#define HID_USAGE_CONSUMER_ILLUMINATION (0x35) // OOC +#define HID_USAGE_CONSUMER_FUNCTION_BUTTONS (0x36) // NAry +#define HID_USAGE_CONSUMER_MENU (0x40) // OOC +#define HID_USAGE_CONSUMER_MENU_PICK (0x41) // OSC +#define HID_USAGE_CONSUMER_MENU_UP (0x42) // OSC +#define HID_USAGE_CONSUMER_MENU_DOWN (0x43) // OSC +#define HID_USAGE_CONSUMER_MENU_LEFT (0x44) // OSC +#define HID_USAGE_CONSUMER_MENU_RIGHT (0x45) // OSC +#define HID_USAGE_CONSUMER_MENU_ESCAPE (0x46) // OSC +#define HID_USAGE_CONSUMER_MENU_VALUE_INCREASE (0x47) // OSC +#define HID_USAGE_CONSUMER_MENU_VALUE_DECREASE (0x48) // OSC +#define HID_USAGE_CONSUMER_DATA_ON_SCREEN (0x60) // OOC +#define HID_USAGE_CONSUMER_CLOSED_CAPTION (0x61) // OOC +#define HID_USAGE_CONSUMER_CLOSED_CAPTION_SELECT (0x62) // OSC +#define HID_USAGE_CONSUMER_VCR_TV (0x63) // OOC +#define HID_USAGE_CONSUMER_BROADCAST_MODE (0x64) // OSC +#define HID_USAGE_CONSUMER_SNAPSHOT (0x65) // OSC +#define HID_USAGE_CONSUMER_STILL (0x66) // OSC +#define HID_USAGE_CONSUMER_PICTURE_IN_PICTURE_TOGGLE (0x67) // OSC +#define HID_USAGE_CONSUMER_PICTURE_IN_PICTURE_SWAP (0x68) // OSC +#define HID_USAGE_CONSUMER_RED_MENU_BUTTON (0x69) // MC +#define HID_USAGE_CONSUMER_GREEN_MENU_BUTTON (0x6A) // MC +#define HID_USAGE_CONSUMER_BLUE_MENU_BUTTON (0x6B) // MC +#define HID_USAGE_CONSUMER_YELLOW_MENU_BUTTON (0x6C) // MC +#define HID_USAGE_CONSUMER_ASPECT (0x6D) // OSC +#define HID_USAGE_CONSUMER_3D_MODE_SELECT (0x6E) // OSC +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_INCREMENT (0x6F) // RTC +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_DECREMENT (0x70) // RTC +#define HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS (0x71) // LC +#define HID_USAGE_CONSUMER_DISPLAY_BACKLIGHT_TOGGLE (0x72) // OOC +#define HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MINIMUM (0x73) // OSC +#define HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MAXIMUM (0x74) // OSC +#define HID_USAGE_CONSUMER_DISPLAY_SET_AUTO_BRIGHTNESS (0x75) // OOC +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_ENABLED (0x76) // OOC +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_DISABLED (0x77) // OOC +#define HID_USAGE_CONSUMER_CAMERA_ACCESS_TOGGLE (0x78) // OOC +#define HID_USAGE_CONSUMER_KEYBOARD_BRIGHTNESS_INCREMENT (0x79) // OSC +#define HID_USAGE_CONSUMER_KEYBOARD_BRIGHTNESS_DECREMENT (0x7A) // OSC +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_LEVEL (0x7B) // LC +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_OOC (0x7C) // OOC +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_MINIMUM (0x7D) // OSC +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_SET_MAXIMUM (0x7E) // OSC +#define HID_USAGE_CONSUMER_KEYBOARD_BACKLIGHT_AUTO (0x7F) // OOC +#define HID_USAGE_CONSUMER_SELECTION (0x80) // NAry +#define HID_USAGE_CONSUMER_ASSIGN_SELECTION (0x81) // OSC +#define HID_USAGE_CONSUMER_MODE_STEP (0x82) // OSC +#define HID_USAGE_CONSUMER_RECALL_LAST (0x83) // OSC +#define HID_USAGE_CONSUMER_ENTER_CHANNEL (0x84) // OSC +#define HID_USAGE_CONSUMER_ORDER_MOVIE (0x85) // OSC +#define HID_USAGE_CONSUMER_CHANNEL (0x86) // LC +#define HID_USAGE_CONSUMER_MEDIA_SELECTION (0x87) // NAry +#define HID_USAGE_CONSUMER_MEDIA_SELECT_COMPUTER (0x88) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TV (0x89) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_WWW (0x8A) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_DVD (0x8B) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TELEPHONE (0x8C) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE (0x8D) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_VIDEO_PHONE (0x8E) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_GAMES (0x8F) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_MESSAGES (0x90) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CD (0x91) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_VCR (0x92) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TUNER (0x93) // Sel +#define HID_USAGE_CONSUMER_QUIT (0x94) // OSC +#define HID_USAGE_CONSUMER_HELP (0x95) // OOC +#define HID_USAGE_CONSUMER_MEDIA_SELECT_TAPE (0x96) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CABLE (0x97) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SATELLITE (0x98) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SECURITY (0x99) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_HOME (0x9A) // Sel +#define HID_USAGE_CONSUMER_MEDIA_SELECT_CALL (0x9B) // Sel +#define HID_USAGE_CONSUMER_CHANNEL_INCREMENT (0x9C) // OSC +#define HID_USAGE_CONSUMER_CHANNEL_DECREMENT (0x9D) // OSC +#define HID_USAGE_CONSUMER_MEDIA_SELECT_SAP (0x9E) // Sel +#define HID_USAGE_CONSUMER_VCR_PLUS (0xA0) // OSC +#define HID_USAGE_CONSUMER_ONCE (0xA1) // OSC +#define HID_USAGE_CONSUMER_DAILY (0xA2) // OSC +#define HID_USAGE_CONSUMER_WEEKLY (0xA3) // OSC +#define HID_USAGE_CONSUMER_MONTHLY (0xA4) // OSC +#define HID_USAGE_CONSUMER_PLAY (0xB0) // OOC +#define HID_USAGE_CONSUMER_PAUSE (0xB1) // OOC +#define HID_USAGE_CONSUMER_RECORD (0xB2) // OOC +#define HID_USAGE_CONSUMER_FAST_FORWARD (0xB3) // OOC +#define HID_USAGE_CONSUMER_REWIND (0xB4) // OOC +#define HID_USAGE_CONSUMER_SCAN_NEXT_TRACK (0xB5) // OSC +#define HID_USAGE_CONSUMER_SCAN_PREVIOUS_TRACK (0xB6) // OSC +#define HID_USAGE_CONSUMER_STOP (0xB7) // OSC +#define HID_USAGE_CONSUMER_EJECT (0xB8) // OSC +#define HID_USAGE_CONSUMER_RANDOM_PLAY (0xB9) // OOC +#define HID_USAGE_CONSUMER_SELECT_DISC (0xBA) // NAry +#define HID_USAGE_CONSUMER_ENTER_DISC (0xBB) // MC +#define HID_USAGE_CONSUMER_REPEAT (0xBC) // OSC +#define HID_USAGE_CONSUMER_TRACKING (0xBD) // LC +#define HID_USAGE_CONSUMER_TRACK_NORMAL (0xBE) // OSC +#define HID_USAGE_CONSUMER_SLOW_TRACKING (0xBF) // LC +#define HID_USAGE_CONSUMER_FRAME_FORWARD (0xC0) // RTC +#define HID_USAGE_CONSUMER_FRAME_BACK (0xC1) // RTC +#define HID_USAGE_CONSUMER_MARK (0xC2) // OSC +#define HID_USAGE_CONSUMER_CLEAR_MARK (0xC3) // OSC +#define HID_USAGE_CONSUMER_REPEAT_FROM_MARK (0xC4) // OOC +#define HID_USAGE_CONSUMER_RETURN_TO_MARK (0xC5) // OSC +#define HID_USAGE_CONSUMER_SEARCH_MARK_FORWARD (0xC6) // OSC +#define HID_USAGE_CONSUMER_SEARCH_MARK_BACKWARDS (0xC7) // OSC +#define HID_USAGE_CONSUMER_COUNTER_RESET (0xC8) // OSC +#define HID_USAGE_CONSUMER_SHOW_COUNTER (0xC9) // OSC +#define HID_USAGE_CONSUMER_TRACKING_INCREMENT (0xCA) // RTC +#define HID_USAGE_CONSUMER_TRACKING_DECREMENT (0xCB) // RTC +#define HID_USAGE_CONSUMER_STOP_EJECT (0xCC) // OSC +#define HID_USAGE_CONSUMER_PLAY_PAUSE (0xCD) // OSC +#define HID_USAGE_CONSUMER_PLAY_SKIP (0xCE) // OSC +#define HID_USAGE_CONSUMER_VOICE_COMMAND (0xCF) // OSC +#define HID_USAGE_CONSUMER_INVOKE_CAPTURE_INTERFACE (0xD0) // Sel +#define HID_USAGE_CONSUMER_START_OR_STOP_GAME_RECORDING (0xD1) // Sel +#define HID_USAGE_CONSUMER_HISTORICAL_GAME_CAPTURE (0xD2) // Sel +#define HID_USAGE_CONSUMER_CAPTURE_GAME_SCREENSHOT (0xD3) // Sel +#define HID_USAGE_CONSUMER_SHOW_OR_HIDE_RECORDING_INDICATOR (0xD4) // Sel +#define HID_USAGE_CONSUMER_START_OR_STOP_MICROPHONE_CAPTURE (0xD5) // Sel +#define HID_USAGE_CONSUMER_START_OR_STOP_CAMERA_CAPTURE (0xD6) // Sel +#define HID_USAGE_CONSUMER_START_OR_STOP_GAME_BROADCAST (0xD7) // Sel +#define HID_USAGE_CONSUMER_VOLUME (0xE0) // LC +#define HID_USAGE_CONSUMER_BALANCE (0xE1) // LC +#define HID_USAGE_CONSUMER_MUTE (0xE2) // OOC +#define HID_USAGE_CONSUMER_BASS (0xE3) // LC +#define HID_USAGE_CONSUMER_TREBLE (0xE4) // LC +#define HID_USAGE_CONSUMER_BASS_BOOST (0xE5) // OOC +#define HID_USAGE_CONSUMER_SURROUND_MODE (0xE6) // OSC +#define HID_USAGE_CONSUMER_LOUDNESS (0xE7) // OOC +#define HID_USAGE_CONSUMER_MPX (0xE8) // OOC +#define HID_USAGE_CONSUMER_VOLUME_INCREMENT (0xE9) // RTC +#define HID_USAGE_CONSUMER_VOLUME_DECREMENT (0xEA) // RTC +#define HID_USAGE_CONSUMER_SPEED_SELECT (0xF0) // OSC +#define HID_USAGE_CONSUMER_PLAYBACK_SPEED (0xF1) // NAry +#define HID_USAGE_CONSUMER_STANDARD_PLAY (0xF2) // Sel +#define HID_USAGE_CONSUMER_LONG_PLAY (0xF3) // Sel +#define HID_USAGE_CONSUMER_EXTENDED_PLAY (0xF4) // Sel +#define HID_USAGE_CONSUMER_SLOW (0xF5) // OSC +#define HID_USAGE_CONSUMER_FAN_ENABLE (0x100) // OOC +#define HID_USAGE_CONSUMER_FAN_SPEED (0x101) // LC +#define HID_USAGE_CONSUMER_LIGHT_ENABLE (0x102) // OOC +#define HID_USAGE_CONSUMER_LIGHT_ILLUMINATION_LEVEL (0x103) // LC +#define HID_USAGE_CONSUMER_CLIMATE_CONTROL_ENABLE (0x104) // OOC +#define HID_USAGE_CONSUMER_ROOM_TEMPERATURE (0x105) // LC +#define HID_USAGE_CONSUMER_SECURITY_ENABLE (0x106) // OOC +#define HID_USAGE_CONSUMER_FIRE_ALARM (0x107) // OSC +#define HID_USAGE_CONSUMER_POLICE_ALARM (0x108) // OSC +#define HID_USAGE_CONSUMER_PROXIMITY (0x109) // LC +#define HID_USAGE_CONSUMER_MOTION (0x10A) // OSC +#define HID_USAGE_CONSUMER_DURESS_ALARM (0x10B) // OSC +#define HID_USAGE_CONSUMER_HOLDUP_ALARM (0x10C) // OSC +#define HID_USAGE_CONSUMER_MEDICAL_ALARM (0x10D) // OSC +#define HID_USAGE_CONSUMER_BALANCE_RIGHT (0x150) // RTC +#define HID_USAGE_CONSUMER_BALANCE_LEFT (0x151) // RTC +#define HID_USAGE_CONSUMER_BASS_INCREMENT (0x152) // RTC +#define HID_USAGE_CONSUMER_BASS_DECREMENT (0x153) // RTC +#define HID_USAGE_CONSUMER_TREBLE_INCREMENT (0x154) // RTC +#define HID_USAGE_CONSUMER_TREBLE_DECREMENT (0x155) // RTC +#define HID_USAGE_CONSUMER_SPEAKER_SYSTEM (0x160) // CL +#define HID_USAGE_CONSUMER_CHANNEL_LEFT (0x161) // CL +#define HID_USAGE_CONSUMER_CHANNEL_RIGHT (0x162) // CL +#define HID_USAGE_CONSUMER_CHANNEL_CENTER (0x163) // CL +#define HID_USAGE_CONSUMER_CHANNEL_FRONT (0x164) // CL +#define HID_USAGE_CONSUMER_CHANNEL_CENTER_FRONT (0x165) // CL +#define HID_USAGE_CONSUMER_CHANNEL_SIDE (0x166) // CL +#define HID_USAGE_CONSUMER_CHANNEL_SURROUND (0x167) // CL +#define HID_USAGE_CONSUMER_CHANNEL_LOW_FREQUENCY_ENHANCEMENT (0x168) // CL +#define HID_USAGE_CONSUMER_CHANNEL_TOP (0x169) // CL +#define HID_USAGE_CONSUMER_CHANNEL_UNKNOWN (0x16A) // CL +#define HID_USAGE_CONSUMER_SUB_CHANNEL (0x170) // LC +#define HID_USAGE_CONSUMER_SUB_CHANNEL_INCREMENT (0x171) // OSC +#define HID_USAGE_CONSUMER_SUB_CHANNEL_DECREMENT (0x172) // OSC +#define HID_USAGE_CONSUMER_ALTERNATE_AUDIO_INCREMENT (0x173) // OSC +#define HID_USAGE_CONSUMER_ALTERNATE_AUDIO_DECREMENT (0x174) // OSC +#define HID_USAGE_CONSUMER_APPLICATION_LAUNCH_BUTTONS (0x180) // NAry +#define HID_USAGE_CONSUMER_AL_LAUNCH_BUTTON_CONFIGURATION_TOOL (0x181) // Sel +#define HID_USAGE_CONSUMER_AL_PROGRAMMABLE_BUTTON_CONFIGURATION (0x182) // Sel +#define HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION (0x183) // Sel +#define HID_USAGE_CONSUMER_AL_WORD_PROCESSOR (0x184) // Sel +#define HID_USAGE_CONSUMER_AL_TEXT_EDITOR (0x185) // Sel +#define HID_USAGE_CONSUMER_AL_SPREADSHEET (0x186) // Sel +#define HID_USAGE_CONSUMER_AL_GRAPHICS_EDITOR (0x187) // Sel +#define HID_USAGE_CONSUMER_AL_PRESENTATION_APP (0x188) // Sel +#define HID_USAGE_CONSUMER_AL_DATABASE_APP (0x189) // Sel +#define HID_USAGE_CONSUMER_AL_EMAIL_READER (0x18A) // Sel +#define HID_USAGE_CONSUMER_AL_NEWSREADER (0x18B) // Sel +#define HID_USAGE_CONSUMER_AL_VOICEMAIL (0x18C) // Sel +#define HID_USAGE_CONSUMER_AL_CONTACTS_ADDRESS_BOOK (0x18D) // Sel +#define HID_USAGE_CONSUMER_AL_CALENDAR_SCHEDULE (0x18E) // Sel +#define HID_USAGE_CONSUMER_AL_TASK_PROJECT_MANAGER (0x18F) // Sel +#define HID_USAGE_CONSUMER_AL_LOG_JOURNAL_TIMECARD (0x190) // Sel +#define HID_USAGE_CONSUMER_AL_CHECKBOOK_FINANCE (0x191) // Sel +#define HID_USAGE_CONSUMER_AL_CALCULATOR (0x192) // Sel +#define HID_USAGE_CONSUMER_AL_A_V_CAPTURE_PLAYBACK (0x193) // Sel +#define HID_USAGE_CONSUMER_AL_LOCAL_MACHINE_BROWSER (0x194) // Sel +#define HID_USAGE_CONSUMER_AL_LAN_WAN_BROWSER (0x195) // Sel +#define HID_USAGE_CONSUMER_AL_INTERNET_BROWSER (0x196) // Sel +#define HID_USAGE_CONSUMER_AL_REMOTE_NETWORKING_ISP_CONNECT (0x197) // Sel +#define HID_USAGE_CONSUMER_AL_NETWORK_CONFERENCE (0x198) // Sel +#define HID_USAGE_CONSUMER_AL_NETWORK_CHAT (0x199) // Sel +#define HID_USAGE_CONSUMER_AL_TELEPHONY_DIALER (0x19A) // Sel +#define HID_USAGE_CONSUMER_AL_LOGON (0x19B) // Sel +#define HID_USAGE_CONSUMER_AL_LOGOFF (0x19C) // Sel +#define HID_USAGE_CONSUMER_AL_LOGON_LOGOFF (0x19D) // Sel +#define HID_USAGE_CONSUMER_AL_TERMINAL_LOCK_SCREENSAVER (0x19E) // Sel +#define HID_USAGE_CONSUMER_AL_CONTROL_PANEL (0x19F) // Sel +#define HID_USAGE_CONSUMER_AL_COMMAND_LINE_PROCESSOR_RUN (0x1A0) // Sel +#define HID_USAGE_CONSUMER_AL_PROCESS_TASK_MANAGER (0x1A1) // Sel +#define HID_USAGE_CONSUMER_AL_SELECT_TASK_APPLICATION (0x1A2) // Sel +#define HID_USAGE_CONSUMER_AL_NEXT_TASK_APPLICATION (0x1A3) // Sel +#define HID_USAGE_CONSUMER_AL_PREVIOUS_TASK_APPLICATION (0x1A4) // Sel +#define HID_USAGE_CONSUMER_AL_PREEMPTIVE_HALT_TASK_APPLICATION (0x1A5) // Sel +#define HID_USAGE_CONSUMER_AL_INTEGRATED_HELP_CENTER (0x1A6) // Sel +#define HID_USAGE_CONSUMER_AL_DOCUMENTS (0x1A7) // Sel +#define HID_USAGE_CONSUMER_AL_THESAURUS (0x1A8) // Sel +#define HID_USAGE_CONSUMER_AL_DICTIONARY (0x1A9) // Sel +#define HID_USAGE_CONSUMER_AL_DESKTOP (0x1AA) // Sel +#define HID_USAGE_CONSUMER_AL_SPELL_CHECK (0x1AB) // Sel +#define HID_USAGE_CONSUMER_AL_GRAMMAR_CHECK (0x1AC) // Sel +#define HID_USAGE_CONSUMER_AL_WIRELESS_STATUS (0x1AD) // Sel +#define HID_USAGE_CONSUMER_AL_KEYBOARD_LAYOUT (0x1AE) // Sel +#define HID_USAGE_CONSUMER_AL_VIRUS_PROTECTION (0x1AF) // Sel +#define HID_USAGE_CONSUMER_AL_ENCRYPTION (0x1B0) // Sel +#define HID_USAGE_CONSUMER_AL_SCREEN_SAVER (0x1B1) // Sel +#define HID_USAGE_CONSUMER_AL_ALARMS (0x1B2) // Sel +#define HID_USAGE_CONSUMER_AL_CLOCK (0x1B3) // Sel +#define HID_USAGE_CONSUMER_AL_FILE_BROWSER (0x1B4) // Sel +#define HID_USAGE_CONSUMER_AL_POWER_STATUS (0x1B5) // Sel +#define HID_USAGE_CONSUMER_AL_IMAGE_BROWSER (0x1B6) // Sel +#define HID_USAGE_CONSUMER_AL_AUDIO_BROWSER (0x1B7) // Sel +#define HID_USAGE_CONSUMER_AL_MOVIE_BROWSER (0x1B8) // Sel +#define HID_USAGE_CONSUMER_AL_DIGITAL_RIGHTS_MANAGER (0x1B9) // Sel +#define HID_USAGE_CONSUMER_AL_DIGITAL_WALLET (0x1BA) // Sel +#define HID_USAGE_CONSUMER_AL_INSTANT_MESSAGING (0x1BC) // Sel +#define HID_USAGE_CONSUMER_AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER (0x1BD) // Sel +#define HID_USAGE_CONSUMER_AL_OEM_HELP (0x1BE) // Sel +#define HID_USAGE_CONSUMER_AL_ONLINE_COMMUNITY (0x1BF) // Sel +#define HID_USAGE_CONSUMER_AL_ENTERTAINMENT_CONTENT_BROWSER (0x1C0) // Sel +#define HID_USAGE_CONSUMER_AL_ONLINE_SHOPPING_BROWSER (0x1C1) // Sel +#define HID_USAGE_CONSUMER_AL_SMARTCARD_INFORMATION_HELP (0x1C2) // Sel +#define HID_USAGE_CONSUMER_AL_MARKET_MONITOR_FINANCE_BROWSER (0x1C3) // Sel +#define HID_USAGE_CONSUMER_AL_CUSTOMIZED_CORPORATE_NEWS_BROWSER (0x1C4) // Sel +#define HID_USAGE_CONSUMER_AL_ONLINE_ACTIVITY_BROWSER (0x1C5) // Sel +#define HID_USAGE_CONSUMER_AL_RESEARCH_SEARCH_BROWSER (0x1C6) // Sel +#define HID_USAGE_CONSUMER_AL_AUDIO_PLAYER (0x1C7) // Sel +#define HID_USAGE_CONSUMER_AL_MESSAGE_STATUS (0x1C8) // Sel +#define HID_USAGE_CONSUMER_AL_CONTACT_SYNC (0x1C9) // Sel +#define HID_USAGE_CONSUMER_AL_NAVIGATION (0x1CA) // Sel +#define HID_USAGE_CONSUMER_AL_CONTEXT_AWARE_DESKTOP_ASSISTANT (0x1CB) // Sel +#define HID_USAGE_CONSUMER_GENERIC_GUI_APPLICATION_CONTROLS (0x200) // NAry +#define HID_USAGE_CONSUMER_AC_NEW (0x201) // Sel +#define HID_USAGE_CONSUMER_AC_OPEN (0x202) // Sel +#define HID_USAGE_CONSUMER_AC_CLOSE (0x203) // Sel +#define HID_USAGE_CONSUMER_AC_EXIT (0x204) // Sel +#define HID_USAGE_CONSUMER_AC_MAXIMIZE (0x205) // Sel +#define HID_USAGE_CONSUMER_AC_MINIMIZE (0x206) // Sel +#define HID_USAGE_CONSUMER_AC_SAVE (0x207) // Sel +#define HID_USAGE_CONSUMER_AC_PRINT (0x208) // Sel +#define HID_USAGE_CONSUMER_AC_PROPERTIES (0x209) // Sel +#define HID_USAGE_CONSUMER_AC_UNDO (0x21A) // Sel +#define HID_USAGE_CONSUMER_AC_COPY (0x21B) // Sel +#define HID_USAGE_CONSUMER_AC_CUT (0x21C) // Sel +#define HID_USAGE_CONSUMER_AC_PASTE (0x21D) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_ALL (0x21E) // Sel +#define HID_USAGE_CONSUMER_AC_FIND (0x21F) // Sel +#define HID_USAGE_CONSUMER_AC_FIND_AND_REPLACE (0x220) // Sel +#define HID_USAGE_CONSUMER_AC_SEARCH (0x221) // Sel +#define HID_USAGE_CONSUMER_AC_GO_TO (0x222) // Sel +#define HID_USAGE_CONSUMER_AC_HOME (0x223) // Sel +#define HID_USAGE_CONSUMER_AC_BACK (0x224) // Sel +#define HID_USAGE_CONSUMER_AC_FORWARD (0x225) // Sel +#define HID_USAGE_CONSUMER_AC_STOP (0x226) // Sel +#define HID_USAGE_CONSUMER_AC_REFRESH (0x227) // Sel +#define HID_USAGE_CONSUMER_AC_PREVIOUS_LINK (0x228) // Sel +#define HID_USAGE_CONSUMER_AC_NEXT_LINK (0x229) // Sel +#define HID_USAGE_CONSUMER_AC_BOOKMARKS (0x22A) // Sel +#define HID_USAGE_CONSUMER_AC_HISTORY (0x22B) // Sel +#define HID_USAGE_CONSUMER_AC_SUBSCRIPTIONS (0x22C) // Sel +#define HID_USAGE_CONSUMER_AC_ZOOM_IN (0x22D) // Sel +#define HID_USAGE_CONSUMER_AC_ZOOM_OUT (0x22E) // Sel +#define HID_USAGE_CONSUMER_AC_ZOOM (0x22F) // LC +#define HID_USAGE_CONSUMER_AC_FULL_SCREEN_VIEW (0x230) // Sel +#define HID_USAGE_CONSUMER_AC_NORMAL_VIEW (0x231) // Sel +#define HID_USAGE_CONSUMER_AC_VIEW_TOGGLE (0x232) // Sel +#define HID_USAGE_CONSUMER_AC_SCROLL_UP (0x233) // Sel +#define HID_USAGE_CONSUMER_AC_SCROLL_DOWN (0x234) // Sel +#define HID_USAGE_CONSUMER_AC_SCROLL (0x235) // LC +#define HID_USAGE_CONSUMER_AC_PAN_LEFT (0x236) // Sel +#define HID_USAGE_CONSUMER_AC_PAN_RIGHT (0x237) // Sel +#define HID_USAGE_CONSUMER_AC_PAN (0x238) // LC +#define HID_USAGE_CONSUMER_AC_NEW_WINDOW (0x239) // Sel +#define HID_USAGE_CONSUMER_AC_TILE_HORIZONTALLY (0x23A) // Sel +#define HID_USAGE_CONSUMER_AC_TILE_VERTICALLY (0x23B) // Sel +#define HID_USAGE_CONSUMER_AC_FORMAT (0x23C) // Sel +#define HID_USAGE_CONSUMER_AC_EDIT (0x23D) // Sel +#define HID_USAGE_CONSUMER_AC_BOLD (0x23E) // Sel +#define HID_USAGE_CONSUMER_AC_ITALICS (0x23F) // Sel +#define HID_USAGE_CONSUMER_AC_UNDERLINE (0x240) // Sel +#define HID_USAGE_CONSUMER_AC_STRIKETHROUGH (0x241) // Sel +#define HID_USAGE_CONSUMER_AC_SUBSCRIPT (0x242) // Sel +#define HID_USAGE_CONSUMER_AC_SUPERSCRIPT (0x243) // Sel +#define HID_USAGE_CONSUMER_AC_ALL_CAPS (0x244) // Sel +#define HID_USAGE_CONSUMER_AC_ROTATE (0x245) // Sel +#define HID_USAGE_CONSUMER_AC_RESIZE (0x246) // Sel +#define HID_USAGE_CONSUMER_AC_FLIP_HORIZONTAL (0x247) // Sel +#define HID_USAGE_CONSUMER_AC_FLIP_VERTICAL (0x248) // Sel +#define HID_USAGE_CONSUMER_AC_MIRROR_HORIZONTAL (0x249) // Sel +#define HID_USAGE_CONSUMER_AC_MIRROR_VERTICAL (0x24A) // Sel +#define HID_USAGE_CONSUMER_AC_FONT_SELECT (0x24B) // Sel +#define HID_USAGE_CONSUMER_AC_FONT_COLOR (0x24C) // Sel +#define HID_USAGE_CONSUMER_AC_FONT_SIZE (0x24D) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_LEFT (0x24E) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_CENTER_H (0x24F) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_RIGHT (0x250) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BLOCK_H (0x251) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_TOP (0x252) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_CENTER_V (0x253) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BOTTOM (0x254) // Sel +#define HID_USAGE_CONSUMER_AC_JUSTIFY_BLOCK_V (0x255) // Sel +#define HID_USAGE_CONSUMER_AC_INDENT_DECREASE (0x256) // Sel +#define HID_USAGE_CONSUMER_AC_INDENT_INCREASE (0x257) // Sel +#define HID_USAGE_CONSUMER_AC_NUMBERED_LIST (0x258) // Sel +#define HID_USAGE_CONSUMER_AC_RESTART_NUMBERING (0x259) // Sel +#define HID_USAGE_CONSUMER_AC_BULLETED_LIST (0x25A) // Sel +#define HID_USAGE_CONSUMER_AC_PROMOTE (0x25B) // Sel +#define HID_USAGE_CONSUMER_AC_DEMOTE (0x25C) // Sel +#define HID_USAGE_CONSUMER_AC_YES (0x25D) // Sel +#define HID_USAGE_CONSUMER_AC_NO (0x25E) // Sel +#define HID_USAGE_CONSUMER_AC_CANCEL (0x25F) // Sel +#define HID_USAGE_CONSUMER_AC_CATALOG (0x260) // Sel +#define HID_USAGE_CONSUMER_AC_BUY_CHECKOUT (0x261) // Sel +#define HID_USAGE_CONSUMER_AC_ADD_TO_CART (0x262) // Sel +#define HID_USAGE_CONSUMER_AC_EXPAND (0x263) // Sel +#define HID_USAGE_CONSUMER_AC_EXPAND_ALL (0x264) // Sel +#define HID_USAGE_CONSUMER_AC_COLLAPSE (0x265) // Sel +#define HID_USAGE_CONSUMER_AC_COLLAPSE_ALL (0x266) // Sel +#define HID_USAGE_CONSUMER_AC_PRINT_PREVIEW (0x267) // Sel +#define HID_USAGE_CONSUMER_AC_PASTE_SPECIAL (0x268) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_MODE (0x269) // Sel +#define HID_USAGE_CONSUMER_AC_DELETE (0x26A) // Sel +#define HID_USAGE_CONSUMER_AC_LOCK (0x26B) // Sel +#define HID_USAGE_CONSUMER_AC_UNLOCK (0x26C) // Sel +#define HID_USAGE_CONSUMER_AC_PROTECT (0x26D) // Sel +#define HID_USAGE_CONSUMER_AC_UNPROTECT (0x26E) // Sel +#define HID_USAGE_CONSUMER_AC_ATTACH_COMMENT (0x26F) // Sel +#define HID_USAGE_CONSUMER_AC_DELETE_COMMENT (0x270) // Sel +#define HID_USAGE_CONSUMER_AC_VIEW_COMMENT (0x271) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_WORD (0x272) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_SENTENCE (0x273) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_PARAGRAPH (0x274) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_COLUMN (0x275) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_ROW (0x276) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_TABLE (0x277) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_OBJECT (0x278) // Sel +#define HID_USAGE_CONSUMER_AC_REDO_REPEAT (0x279) // Sel +#define HID_USAGE_CONSUMER_AC_SORT (0x27A) // Sel +#define HID_USAGE_CONSUMER_AC_SORT_ASCENDING (0x27B) // Sel +#define HID_USAGE_CONSUMER_AC_SORT_DESCENDING (0x27C) // Sel +#define HID_USAGE_CONSUMER_AC_FILTER (0x27D) // Sel +#define HID_USAGE_CONSUMER_AC_SET_CLOCK (0x27E) // Sel +#define HID_USAGE_CONSUMER_AC_VIEW_CLOCK (0x27F) // Sel +#define HID_USAGE_CONSUMER_AC_SELECT_TIME_ZONE (0x280) // Sel +#define HID_USAGE_CONSUMER_AC_EDIT_TIME_ZONES (0x281) // Sel +#define HID_USAGE_CONSUMER_AC_SET_ALARM (0x282) // Sel +#define HID_USAGE_CONSUMER_AC_CLEAR_ALARM (0x283) // Sel +#define HID_USAGE_CONSUMER_AC_SNOOZE_ALARM (0x284) // Sel +#define HID_USAGE_CONSUMER_AC_RESET_ALARM (0x285) // Sel +#define HID_USAGE_CONSUMER_AC_SYNCHRONIZE (0x286) // Sel +#define HID_USAGE_CONSUMER_AC_SEND_RECEIVE (0x287) // Sel +#define HID_USAGE_CONSUMER_AC_SEND_TO (0x288) // Sel +#define HID_USAGE_CONSUMER_AC_REPLY (0x289) // Sel +#define HID_USAGE_CONSUMER_AC_REPLY_ALL (0x28A) // Sel +#define HID_USAGE_CONSUMER_AC_FORWARD_MSG (0x28B) // Sel +#define HID_USAGE_CONSUMER_AC_SEND (0x28C) // Sel +#define HID_USAGE_CONSUMER_AC_ATTACH_FILE (0x28D) // Sel +#define HID_USAGE_CONSUMER_AC_UPLOAD (0x28E) // Sel +#define HID_USAGE_CONSUMER_AC_DOWNLOAD_SAVE_TARGET_AS (0x28F) // Sel +#define HID_USAGE_CONSUMER_AC_SET_BORDERS (0x290) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_ROW (0x291) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_COLUMN (0x292) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_FILE (0x293) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_PICTURE (0x294) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_OBJECT (0x295) // Sel +#define HID_USAGE_CONSUMER_AC_INSERT_SYMBOL (0x296) // Sel +#define HID_USAGE_CONSUMER_AC_SAVE_AND_CLOSE (0x297) // Sel +#define HID_USAGE_CONSUMER_AC_RENAME (0x298) // Sel +#define HID_USAGE_CONSUMER_AC_MERGE (0x299) // Sel +#define HID_USAGE_CONSUMER_AC_SPLIT (0x29A) // Sel +#define HID_USAGE_CONSUMER_AC_DISRIBUTE_HORIZONTALLY (0x29B) // Sel +#define HID_USAGE_CONSUMER_AC_DISTRIBUTE_VERTICALLY (0x29C) // Sel +#define HID_USAGE_CONSUMER_AC_NEXT_KEYBOARD_LAYOUT_SELECT (0x29D) // Sel +#define HID_USAGE_CONSUMER_AC_NAVIGATION_GUIDANCE (0x29E) // Sel +#define HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS (0x29F) // Sel +#define HID_USAGE_CONSUMER_AC_SOFT_KEY_LEFT (0x2A0) // Sel +#define HID_USAGE_CONSUMER_AC_SOFT_KEY_RIGHT (0x2A1) // Sel +#define HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_APPLICATIONS (0x2A2) // Sel +#define HID_USAGE_CONSUMER_AC_IDLE_KEEP_ALIVE (0x2B0) // Sel +#define HID_USAGE_CONSUMER_EXTENDED_KEYBOARD_ATTRIBUTES_COLLECTION (0x2C0) // CL +#define HID_USAGE_CONSUMER_KEYBOARD_FORM_FACTOR (0x2C1) // SV +#define HID_USAGE_CONSUMER_KEYBOARD_KEY_TYPE (0x2C2) // SV +#define HID_USAGE_CONSUMER_KEYBOARD_PHYSICAL_LAYOUT (0x2C3) // SV +#define HID_USAGE_CONSUMER_VENDOR_SPECIFIC_KEYBOARD_PHYSICAL_LAYOUT (0x2C4) // SV +#define HID_USAGE_CONSUMER_KEYBOARD_IETF_LANGUAGE_TAG_INDEX (0x2C5) // SV +#define HID_USAGE_CONSUMER_IMPLEMENTED_KEYBOARD_INPUT_ASSIST_CONTROLS (0x2C6) // SV +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS (0x2C7) // Sel +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT (0x2C8) // Sel +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP (0x2C9) // Sel +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT_GROUP (0x2CA) // Sel +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_ACCEPT (0x2CB) // Sel +#define HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL (0x2CC) // Sel +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_TOGGLE (0x2D0) // OOC +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_DECREMENT (0x2D1) // RTC +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_INCREMENT (0x2D2) // RTC +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_MINIMUM (0x2D3) // OSC +#define HID_USAGE_CONSUMER_PRIVACY_SCREEN_LEVEL_MAXIMUM (0x2D4) // OSC +#define HID_USAGE_CONSUMER_CONTACT_EDITED (0x500) // OOC +#define HID_USAGE_CONSUMER_CONTACT_ADDED (0x501) // OOC +#define HID_USAGE_CONSUMER_CONTACT_RECORD_ACTIVE (0x502) // OOC +#define HID_USAGE_CONSUMER_CONTACT_INDEX (0x503) // DV +#define HID_USAGE_CONSUMER_CONTACT_NICKNAME (0x504) // DV +#define HID_USAGE_CONSUMER_CONTACT_FIRST_NAME (0x505) // DV +#define HID_USAGE_CONSUMER_CONTACT_LAST_NAME (0x506) // DV +#define HID_USAGE_CONSUMER_CONTACT_FULL_NAME (0x507) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_PERSONAL (0x508) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_BUSINESS (0x509) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_MOBILE (0x50A) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_PAGER (0x50B) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_FAX (0x50C) // DV +#define HID_USAGE_CONSUMER_CONTACT_PHONE_NUMBER_OTHER (0x50D) // DV +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_PERSONAL (0x50E) // DV +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_BUSINESS (0x50F) // DV +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_OTHER (0x510) // DV +#define HID_USAGE_CONSUMER_CONTACT_EMAIL_MAIN (0x511) // DV +#define HID_USAGE_CONSUMER_CONTACT_SPEED_DIAL_NUMBER (0x512) // DV +#define HID_USAGE_CONSUMER_CONTACT_STATUS_FLAG (0x513) // DV +#define HID_USAGE_CONSUMER_CONTACT_MISC (0x514) // DV + +/* Page 0x0D: Digitizers */ +#define HID_USAGE_DIGITIZERS_UNDEFINED (0x00) +#define HID_USAGE_DIGITIZERS_DIGITIZER (0x01) // CA +#define HID_USAGE_DIGITIZERS_PEN (0x02) // CA +#define HID_USAGE_DIGITIZERS_LIGHT_PEN (0x03) // CA +#define HID_USAGE_DIGITIZERS_TOUCH_SCREEN (0x04) // CA +#define HID_USAGE_DIGITIZERS_TOUCH_PAD (0x05) // CA +#define HID_USAGE_DIGITIZERS_WHITEBOARD (0x06) // CA +#define HID_USAGE_DIGITIZERS_COORDINATE_MEASURING_MACHINE (0x07) // CA +#define HID_USAGE_DIGITIZERS_3D_DIGITIZER (0x08) // CA +#define HID_USAGE_DIGITIZERS_STEREO_PLOTTER (0x09) // CA +#define HID_USAGE_DIGITIZERS_ARTICULATED_ARM (0x0A) // CA +#define HID_USAGE_DIGITIZERS_ARMATURE (0x0B) // CA +#define HID_USAGE_DIGITIZERS_MULTIPLE_POINT_DIGITIZER (0x0C) // CA +#define HID_USAGE_DIGITIZERS_FREE_SPACE_WAND (0x0D) // CA +#define HID_USAGE_DIGITIZERS_DEVICE_CONFIGURATION (0x0E) // CA +#define HID_USAGE_DIGITIZERS_CAPACITIVE_HEAT_MAP_DIGITIZER (0x0F) // CA +#define HID_USAGE_DIGITIZERS_STYLUS (0x20) // CA, CL +#define HID_USAGE_DIGITIZERS_PUCK (0x21) // CL +#define HID_USAGE_DIGITIZERS_FINGER (0x22) // CL +#define HID_USAGE_DIGITIZERS_DEVICE_SETTINGS (0x23) // CL +#define HID_USAGE_DIGITIZERS_CHARACTER_GESTURE (0x24) // CL +#define HID_USAGE_DIGITIZERS_TIP_PRESSURE (0x30) // DV +#define HID_USAGE_DIGITIZERS_BARREL_PRESSURE (0x31) // DV +#define HID_USAGE_DIGITIZERS_IN_RANGE (0x32) // MC +#define HID_USAGE_DIGITIZERS_TOUCH (0x33) // MC +#define HID_USAGE_DIGITIZERS_UNTOUCH (0x34) // OSC +#define HID_USAGE_DIGITIZERS_TAP (0x35) // OSC +#define HID_USAGE_DIGITIZERS_QUALITY (0x36) // DV +#define HID_USAGE_DIGITIZERS_DATA_VALID (0x37) // MC +#define HID_USAGE_DIGITIZERS_TRANSDUCER_INDEX (0x38) // DV +#define HID_USAGE_DIGITIZERS_TABLET_FUNCTION_KEYS (0x39) // CL +#define HID_USAGE_DIGITIZERS_PROGRAM_CHANGE_KEYS (0x3A) // CL +#define HID_USAGE_DIGITIZERS_BATTERY_STRENGTH (0x3B) // DV +#define HID_USAGE_DIGITIZERS_INVERT (0x3C) // MC +#define HID_USAGE_DIGITIZERS_X_TILT (0x3D) // DV +#define HID_USAGE_DIGITIZERS_Y_TILT (0x3E) // DV +#define HID_USAGE_DIGITIZERS_AZIMUTH (0x3F) // DV +#define HID_USAGE_DIGITIZERS_ALTITUDE (0x40) // DV +#define HID_USAGE_DIGITIZERS_TWIST (0x41) // DV +#define HID_USAGE_DIGITIZERS_TIP_SWITCH (0x42) // MC +#define HID_USAGE_DIGITIZERS_SECONDARY_TIP_SWITCH (0x43) // MC +#define HID_USAGE_DIGITIZERS_BARREL_SWITCH (0x44) // MC +#define HID_USAGE_DIGITIZERS_ERASER (0x45) // MC +#define HID_USAGE_DIGITIZERS_TABLET_PICK (0x46) // MC +#define HID_USAGE_DIGITIZERS_TOUCH_VALID (0x47) // MC +#define HID_USAGE_DIGITIZERS_WIDTH (0x48) // DV +#define HID_USAGE_DIGITIZERS_HEIGHT (0x49) // DV +#define HID_USAGE_DIGITIZERS_CONTACT_IDENTIFIER (0x51) // DV +#define HID_USAGE_DIGITIZERS_DEVICE_MODE (0x52) // DV +#define HID_USAGE_DIGITIZERS_DEVICE_IDENTIFIER (0x53) // DV, SV +#define HID_USAGE_DIGITIZERS_CONTACT_COUNT (0x54) // DV +#define HID_USAGE_DIGITIZERS_CONTACT_COUNT_MAXIMUM (0x55) // SV +#define HID_USAGE_DIGITIZERS_SCAN_TIME (0x56) // DV +#define HID_USAGE_DIGITIZERS_SURFACE_SWITCH (0x57) // DF +#define HID_USAGE_DIGITIZERS_BUTTON_SWITCH (0x58) // DF +#define HID_USAGE_DIGITIZERS_PAD_TYPE (0x59) // SF +#define HID_USAGE_DIGITIZERS_SECONDARY_BARREL_SWITCH (0x5A) // MC +#define HID_USAGE_DIGITIZERS_TRANSDUCER_SERIAL_NUMBER (0x5B) // SV +#define HID_USAGE_DIGITIZERS_PREFERRED_COLOR (0x5C) // DV +#define HID_USAGE_DIGITIZERS_PREFERRED_COLOR_IS_LOCKED (0x5D) // MC +#define HID_USAGE_DIGITIZERS_PREFERRED_LINE_WIDTH (0x5E) // DV +#define HID_USAGE_DIGITIZERS_PREFERRED_LINE_WIDTH_IS_LOCKED (0x5F) // MC +#define HID_USAGE_DIGITIZERS_LATENCY_MODE (0x60) // DF +#define HID_USAGE_DIGITIZERS_GESTURE_CHARACTER_QUALITY (0x61) // DV +#define HID_USAGE_DIGITIZERS_CHARACTER_GESTURE_DATA_LENGTH (0x62) // DV +#define HID_USAGE_DIGITIZERS_CHARACTER_GESTURE_DATA (0x63) // DV +#define HID_USAGE_DIGITIZERS_GESTURE_CHARACTER_ENCODING (0x64) // NAry +#define HID_USAGE_DIGITIZERS_UTF8_CHARACTER_GESTURE_ENCODING (0x65) // Sel +#define HID_USAGE_DIGITIZERS_UTF16_LITTLE_ENDIAN_CHARACTER_GESTURE_ENCODING (0x66) // Sel +#define HID_USAGE_DIGITIZERS_UTF16_BIG_ENDIAN_CHARACTER_GESTURE_ENCODING (0x67) // Sel +#define HID_USAGE_DIGITIZERS_UTF32_LITTLE_ENDIAN_CHARACTER_GESTURE_ENCODING (0x68) // Sel +#define HID_USAGE_DIGITIZERS_UTF32_BIG_ENDIAN_CHARACTER_GESTURE_ENCODING (0x69) // Sel +#define HID_USAGE_DIGITIZERS_CAPACITIVE_HEAT_MAP_PROTOCOL_VENDOR_ID (0x6A) // SV +#define HID_USAGE_DIGITIZERS_CAPACITIVE_HEAT_MAP_PROTOCOL_VERSION (0x6B) // SV +#define HID_USAGE_DIGITIZERS_CAPACITIVE_HEAT_MAP_FRAME_DATA (0x6C) // DV +#define HID_USAGE_DIGITIZERS_GESTURE_CHARACTER_ENABLE (0x6D) // DF +#define HID_USAGE_DIGITIZERS_PREFERRED_LINE_STYLE (0x70) // NAry +#define HID_USAGE_DIGITIZERS_PREFERRED_LINE_STYLE_IS_LOCKED (0x71) // MC +#define HID_USAGE_DIGITIZERS_INK (0x72) // Sel +#define HID_USAGE_DIGITIZERS_PENCIL (0x73) // Sel +#define HID_USAGE_DIGITIZERS_HIGHLIGHTER (0x74) // Sel +#define HID_USAGE_DIGITIZERS_CHISEL_MARKER (0x75) // Sel +#define HID_USAGE_DIGITIZERS_BRUSH (0x76) // Sel +#define HID_USAGE_DIGITIZERS_NO_PREFERENCE (0x77) // Sel +#define HID_USAGE_DIGITIZERS_DIGITIZER_DIAGNOSTIC (0x80) // CL +#define HID_USAGE_DIGITIZERS_DIGITIZER_ERROR (0x81) // NAry +#define HID_USAGE_DIGITIZERS_ERR_NORMAL_STATUS (0x82) // Sel +#define HID_USAGE_DIGITIZERS_ERR_TRANSDUCERS_EXCEEDED (0x83) // Sel +#define HID_USAGE_DIGITIZERS_ERR_FULL_TRANS_FEATURES_UNAVAILABLE (0x84) // Sel +#define HID_USAGE_DIGITIZERS_ERR_CHARGE_LOW (0x85) // Sel +#define HID_USAGE_DIGITIZERS_TRANSDUCER_SOFTWARE_INFO (0x90) // CL +#define HID_USAGE_DIGITIZERS_TRANSDUCER_VENDOR_ID (0x91) // SV +#define HID_USAGE_DIGITIZERS_TRANSDUCER_PRODUCT_ID (0x92) // SV +#define HID_USAGE_DIGITIZERS_DEVICE_SUPPORTED_PROTOCOLS (0x93) // NAry, CL +#define HID_USAGE_DIGITIZERS_TRANSDUCER_SUPPORTED_PROTOCOLS (0x94) // NAry, CL +#define HID_USAGE_DIGITIZERS_NO_PROTOCOL (0x95) // Sel +#define HID_USAGE_DIGITIZERS_WACOM_AES_PROTOCOL (0x96) // Sel +#define HID_USAGE_DIGITIZERS_USI_PROTOCOL (0x97) // Sel +#define HID_USAGE_DIGITIZERS_MICROSOFT_PEN_PROTOCOL (0x98) // Sel +#define HID_USAGE_DIGITIZERS_SUPPORTED_REPORT_RATES (0xA0) // SV, CL +#define HID_USAGE_DIGITIZERS_REPORT_RATE (0xA1) // DV +#define HID_USAGE_DIGITIZERS_TRANSDUCER_CONNECTED (0xA2) // SF +#define HID_USAGE_DIGITIZERS_SWITCH_DISABLED (0xA3) // Sel +#define HID_USAGE_DIGITIZERS_SWITCH_UNIMPLEMENTED (0xA4) // Sel +#define HID_USAGE_DIGITIZERS_TRANSDUCER_SWITCHES (0xA5) // Sel + +/* Page 0x0E: Haptics */ +#define HID_USAGE_HAPTICS_UNDEFINED (0x00) +#define HID_USAGE_HAPTICS_SIMPLE_HAPTIC_CONTROLLER (0x01) // CA, CL +#define HID_USAGE_HAPTICS_WAVEFORM_LIST (0x10) // NAry +#define HID_USAGE_HAPTICS_DURATION_LIST (0x11) // NAry +#define HID_USAGE_HAPTICS_AUTO_TRIGGER (0x20) // DV +#define HID_USAGE_HAPTICS_MANUAL_TRIGGER (0x21) // DV +#define HID_USAGE_HAPTICS_AUTO_TRIGGER_ASSOCIATED_CONTROL (0x22) // SV +#define HID_USAGE_HAPTICS_INTENSITY (0x23) // DV +#define HID_USAGE_HAPTICS_REPEAT_COUNT (0x24) // DV +#define HID_USAGE_HAPTICS_RETRIGGER_PERIOD (0x25) // DV +#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_PAGE (0x26) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_VENDOR_ID (0x27) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_CUTOFF_TIME (0x28) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_NONE (0x1001) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_STOP (0x1002) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_CLICK (0x1003) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_BUZZ_CONTINUOUS (0x1004) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_RUMBLE_CONTINUOUS (0x1005) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_PRESS (0x1006) // SV +#define HID_USAGE_HAPTICS_WAVEFORM_RELEASE (0x1007) // SV + +/* Page 0x0F: PID */ +#define HID_USAGE_PID_UNDEFINED (0x00) +#define HID_USAGE_PID_PHYSICAL_INTERFACE_DEVICE (0x01) +#define HID_USAGE_PID_NORMAL (0x20) +#define HID_USAGE_PID_SET_EFFECT_REPORT (0x21) +#define HID_USAGE_PID_EFFECT_BLOCK_INDEX (0x22) +#define HID_USAGE_PID_PARAMETER_BLOCK_OFFSET (0x23) +#define HID_USAGE_PID_ROM_FLAG (0x24) +#define HID_USAGE_PID_EFFECT_TYPE (0x25) +#define HID_USAGE_PID_ET_CONSTANT_FORCE (0x26) +#define HID_USAGE_PID_ET_RAMP (0x27) +#define HID_USAGE_PID_ET_CUSTOM_FORCE_DATA (0x28) +#define HID_USAGE_PID_ET_SQUARE (0x30) +#define HID_USAGE_PID_ET_SINE (0x31) +#define HID_USAGE_PID_ET_TRIANGLE (0x32) +#define HID_USAGE_PID_ET_SAWTOOTH_UP (0x33) +#define HID_USAGE_PID_ET_SAWTOOTH_DOWN (0x34) +#define HID_USAGE_PID_ET_SPRING (0x40) +#define HID_USAGE_PID_ET_DAMPER (0x41) +#define HID_USAGE_PID_ET_INERTIA (0x42) +#define HID_USAGE_PID_ET_FRICTION (0x43) +#define HID_USAGE_PID_DURATION (0x50) +#define HID_USAGE_PID_SAMPLE_PERIOD (0x51) +#define HID_USAGE_PID_GAIN (0x52) +#define HID_USAGE_PID_TRIGGER_BUTTON (0x53) +#define HID_USAGE_PID_TRIGGER_REPEAT_INTERVAL (0x54) +#define HID_USAGE_PID_AXES_ENABLE (0x55) +#define HID_USAGE_PID_DIRECTION_ENABLE (0x56) +#define HID_USAGE_PID_DIRECTION (0x57) +#define HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_OFFSET (0x58) +#define HID_USAGE_PID_BLOCK_TYPE (0x59) +#define HID_USAGE_PID_SET_ENVELOPE_REPORT (0x5A) +#define HID_USAGE_PID_ATTACK_LEVEL (0x5B) +#define HID_USAGE_PID_ATTACK_TIME (0x5C) +#define HID_USAGE_PID_FADE_LEVEL (0x5D) +#define HID_USAGE_PID_FADE_TIME (0x5E) +#define HID_USAGE_PID_SET_CONDITION_REPORT (0x5F) +#define HID_USAGE_PID_CP_OFFSET (0x60) +#define HID_USAGE_PID_POSITIVE_COEFFICIENT (0x61) +#define HID_USAGE_PID_NEGATIVE_COEFFICIENT (0x62) +#define HID_USAGE_PID_POSITIVE_SATURATION (0x63) +#define HID_USAGE_PID_NEGATIVE_SATURATION (0x64) +#define HID_USAGE_PID_DEAD_BAND (0x65) +#define HID_USAGE_PID_DOWNLOAD_FORCE_SAMPLE (0x66) +#define HID_USAGE_PID_ISOCH_CUSTOM_FORCE_ENABLE (0x67) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA_REPORT (0x68) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA (0x69) +#define HID_USAGE_PID_CUSTOM_FORCE_VENDOR_DEFINED_DATA (0x6A) +#define HID_USAGE_PID_SET_CUSTOM_FORCE_REPORT (0x6B) +#define HID_USAGE_PID_CUSTOM_FORCE_DATA_OFFSET (0x6C) +#define HID_USAGE_PID_SAMPLE_COUNT (0x6D) +#define HID_USAGE_PID_SET_PERIODIC_REPORT (0x6E) +#define HID_USAGE_PID_OFFSET (0x6F) +#define HID_USAGE_PID_MAGNITUDE (0x70) +#define HID_USAGE_PID_PHASE (0x71) +#define HID_USAGE_PID_PERIOD (0x72) +#define HID_USAGE_PID_SET_CONSTANT_FORCE_REPORT (0x73) +#define HID_USAGE_PID_SET_RAMP_FORCE_REPORT (0x74) +#define HID_USAGE_PID_RAMP_START (0x75) +#define HID_USAGE_PID_RAMP_END (0x76) +#define HID_USAGE_PID_EFFECT_OPERATION_REPORT (0x77) +#define HID_USAGE_PID_EFFECT_OPERATION (0x78) +#define HID_USAGE_PID_OP_EFFECT_START (0x79) +#define HID_USAGE_PID_OP_EFFECT_START_SOLO (0x7A) +#define HID_USAGE_PID_OP_EFFECT_STOP (0x7B) +#define HID_USAGE_PID_LOOP_COUNT (0x7C) +#define HID_USAGE_PID_DEVICE_GAIN_REPORT (0x7D) +#define HID_USAGE_PID_DEVICE_GAIN (0x7E) +#define HID_USAGE_PID_PID_POOL_REPORT (0x7F) +#define HID_USAGE_PID_RAM_POOL_SIZE (0x80) +#define HID_USAGE_PID_ROM_POOL_SIZE (0x81) +#define HID_USAGE_PID_ROM_EFFECT_BLOCK_COUNT (0x82) +#define HID_USAGE_PID_SIMULTANEOUS_EFFECTS_MAX (0x83) +#define HID_USAGE_PID_POOL_ALIGNMENT (0x84) +#define HID_USAGE_PID_PID_POOL_MOVE_REPORT (0x85) +#define HID_USAGE_PID_MOVE_SOURCE (0x86) +#define HID_USAGE_PID_MOVE_DESTINATION (0x87) +#define HID_USAGE_PID_MOVE_LENGTH (0x88) +#define HID_USAGE_PID_PID_BLOCK_LOAD_REPORT (0x89) +#define HID_USAGE_PID_BLOCK_LOAD_STATUS (0x8B) +#define HID_USAGE_PID_BLOCK_LOAD_SUCCESS (0x8C) +#define HID_USAGE_PID_BLOCK_LOAD_FULL (0x8D) +#define HID_USAGE_PID_BLOCK_LOAD_ERROR (0x8E) +#define HID_USAGE_PID_BLOCK_HANDLE (0x8F) +#define HID_USAGE_PID_PID_BLOCK_FREE_REPORT (0x90) +#define HID_USAGE_PID_TYPE_SPECIFIC_BLOCK_HANDLE (0x91) +#define HID_USAGE_PID_PID_STATE_REPORT (0x92) +#define HID_USAGE_PID_EFFECT_PLAYING (0x94) +#define HID_USAGE_PID_PID_DEVICE_CONTROL_REPORT (0x95) +#define HID_USAGE_PID_PID_DEVICE_CONTROL (0x96) +#define HID_USAGE_PID_DC_ENABLE_ACTUATORS (0x97) +#define HID_USAGE_PID_DC_DISABLE_ACTUATORS (0x98) +#define HID_USAGE_PID_DC_STOP_ALL_EFFECTS (0x99) +#define HID_USAGE_PID_DC_DEVICE_RESET (0x9A) +#define HID_USAGE_PID_DC_DEVICE_PAUSE (0x9B) +#define HID_USAGE_PID_DC_DEVICE_CONTINUE (0x9C) +#define HID_USAGE_PID_DEVICE_PAUSED (0x9F) +#define HID_USAGE_PID_ACTUATORS_ENABLED (0xA0) +#define HID_USAGE_PID_SAFETY_SWITCH (0xA4) +#define HID_USAGE_PID_ACTUATOR_OVERRIDE_SWITCH (0xA5) +#define HID_USAGE_PID_ACTUATOR_POWER (0xA6) +#define HID_USAGE_PID_START_DELAY (0xA7) +#define HID_USAGE_PID_PARAMETER_BLOCK_SIZE (0xA8) +#define HID_USAGE_PID_DEVICE_MANAGED_POOL (0xA9) +#define HID_USAGE_PID_SHARED_PARAMETER_BLOCKS (0xAA) +#define HID_USAGE_PID_CREATE_NEW_EFFECT_REPORT (0xAB) +#define HID_USAGE_PID_RAM_POOL_AVAILABLE (0xAC) + +/* Page 0x12: Eye and Head Trackers */ +#define HID_USAGE_EHT_UNDEFINED (0x00) +#define HID_USAGE_EHT_EYE_TRACKER (0x01) // CA +#define HID_USAGE_EHT_HEAD_TRACKER (0x02) // CA +#define HID_USAGE_EHT_TRACKING_DATA (0x10) // CP +#define HID_USAGE_EHT_CAPABILITIES (0x11) // CL +#define HID_USAGE_EHT_CONFIGURATION (0x12) // CL +#define HID_USAGE_EHT_STATUS (0x13) // CL +#define HID_USAGE_EHT_CONTROL (0x14) // CL +#define HID_USAGE_EHT_SENSOR_TIMESTAMP (0x20) // DV +#define HID_USAGE_EHT_POSITION_X (0x21) // DV +#define HID_USAGE_EHT_POSITION_Y (0x22) // DV +#define HID_USAGE_EHT_POSITION_Z (0x23) // DV +#define HID_USAGE_EHT_GAZE_POINT (0x24) // CP +#define HID_USAGE_EHT_LEFT_EYE_POSITION (0x25) // CP +#define HID_USAGE_EHT_RIGHT_EYE_POSITION (0x26) // CP +#define HID_USAGE_EHT_HEAD_POSITION (0x27) // CP +#define HID_USAGE_EHT_HEAD_DIRECTION_POINT (0x28) // CP +#define HID_USAGE_EHT_ROTATION_ABOUT_X_AXIS (0x29) // DV +#define HID_USAGE_EHT_ROTATION_ABOUT_Y_AXIS (0x2A) // DV +#define HID_USAGE_EHT_ROTATION_ABOUT_Z_AXIS (0x2B) // DV +#define HID_USAGE_EHT_TRACKER_QUALITY (0x100) // SV +#define HID_USAGE_EHT_MINIMUM_TRACKING_DISTANCE (0x101) // SV +#define HID_USAGE_EHT_OPTIMUM_TRACKING_DISTANCE (0x102) // SV +#define HID_USAGE_EHT_MAXIMUM_TRACKING_DISTANCE (0x103) // SV +#define HID_USAGE_EHT_MAXIMUM_SCREEN_PLANE_WIDTH (0x104) // SV +#define HID_USAGE_EHT_MAXIMUM_SCREEN_PLANE_HEIGHT (0x105) // SV +#define HID_USAGE_EHT_DISPLAY_MANUFACTURER_ID (0x200) // SV +#define HID_USAGE_EHT_DISPLAY_PRODUCT_ID (0x201) // SV +#define HID_USAGE_EHT_DISPLAY_SERIAL_NUMBER (0x202) // SV +#define HID_USAGE_EHT_DISPLAY_MANUFACTURER_DATE (0x203) // SV +#define HID_USAGE_EHT_CALIBRATED_SCREEN_WIDTH (0x204) // SV +#define HID_USAGE_EHT_CALIBRATED_SCREEN_HEIGHT (0x205) // SV +#define HID_USAGE_EHT_SAMPLING_FREQUENCY (0x300) // DV +#define HID_USAGE_EHT_CONFIGURATION_STATUS (0x301) // DV +#define HID_USAGE_EHT_DEVICE_MODE_REQUEST (0x400) // DV + +/* Page 0x14: Auxiliary Display */ +#define HID_USAGE_AUXDISP_UNDEFINED (0x00) +#define HID_USAGE_AUXDISP_ALPHANUMERIC_DISPLAY (0x01) // CA +#define HID_USAGE_AUXDISP_AUXILIARY_DISPLAY (0x02) // CA +#define HID_USAGE_AUXDISP_DISPLAY_ATTRIBUTES_REPORT (0x20) // CL +#define HID_USAGE_AUXDISP_ASCII_CHARACTER_SET (0x21) // SF +#define HID_USAGE_AUXDISP_DATA_READ_BACK (0x22) // SF +#define HID_USAGE_AUXDISP_FONT_READ_BACK (0x23) // SF +#define HID_USAGE_AUXDISP_DISPLAY_CONTROL_REPORT (0x24) // CL +#define HID_USAGE_AUXDISP_CLEAR_DISPLAY (0x25) // DF +#define HID_USAGE_AUXDISP_DISPLAY_ENABLE (0x26) // DF +#define HID_USAGE_AUXDISP_SCREEN_SAVER_DELAY (0x27) // SV, DV +#define HID_USAGE_AUXDISP_SCREEN_SAVER_ENABLE (0x28) // DF +#define HID_USAGE_AUXDISP_VERTICAL_SCROLL (0x29) // SF, DF +#define HID_USAGE_AUXDISP_HORIZONTAL_SCROLL (0x2A) // SF, DF +#define HID_USAGE_AUXDISP_CHARACTER_REPORT (0x2B) // CL +#define HID_USAGE_AUXDISP_DISPLAY_DATA (0x2C) // DV +#define HID_USAGE_AUXDISP_DISPLAY_STATUS (0x2D) // CL +#define HID_USAGE_AUXDISP_STAT_NOT_READY (0x2E) // Sel +#define HID_USAGE_AUXDISP_STAT_READY (0x2F) // Sel +#define HID_USAGE_AUXDISP_ERR_NOT_A_LOADABLE_CHARACTER (0x30) // Sel +#define HID_USAGE_AUXDISP_ERR_FONT_DATA_CANNOT_BE_READ (0x31) // Sel +#define HID_USAGE_AUXDISP_CURSOR_POSITION_REPORT (0x32) // Sel +#define HID_USAGE_AUXDISP_ROW (0x33) // DV +#define HID_USAGE_AUXDISP_COLUMN (0x34) // DV +#define HID_USAGE_AUXDISP_ROWS (0x35) // SV +#define HID_USAGE_AUXDISP_COLUMNS (0x36) // SV +#define HID_USAGE_AUXDISP_CURSOR_PIXEL_POSITIONING (0x37) // SF +#define HID_USAGE_AUXDISP_CURSOR_MODE (0x38) // DF +#define HID_USAGE_AUXDISP_CURSOR_ENABLE (0x39) // DF +#define HID_USAGE_AUXDISP_CURSOR_BLINK (0x3A) // DF +#define HID_USAGE_AUXDISP_FONT_REPORT (0x3B) // CL +#define HID_USAGE_AUXDISP_FONT_DATA (0x3C) // Buffered Bytes +#define HID_USAGE_AUXDISP_CHARACTER_WIDTH (0x3D) // SV +#define HID_USAGE_AUXDISP_CHARACTER_HEIGHT (0x3E) // SV +#define HID_USAGE_AUXDISP_CHARACTER_SPACING_HORIZONTAL (0x3F) // SV +#define HID_USAGE_AUXDISP_CHARACTER_SPACING_VERTICAL (0x40) // SV +#define HID_USAGE_AUXDISP_UNICODE_CHARACTER_SET (0x41) // SF +#define HID_USAGE_AUXDISP_FONT_7_SEGMENT (0x42) // SF +#define HID_USAGE_AUXDISP_7_SEGMENT_DIRECT_MAP (0x43) // SF +#define HID_USAGE_AUXDISP_FONT_14_SEGMENT (0x44) // SF +#define HID_USAGE_AUXDISP_14_SEGMENT_DIRECT_MAP (0x45) // SF +#define HID_USAGE_AUXDISP_DISPLAY_BRIGHTNESS (0x46) // DV +#define HID_USAGE_AUXDISP_DISPLAY_CONTRAST (0x47) // DV +#define HID_USAGE_AUXDISP_CHARACTER_ATTRIBUTE (0x48) // CL +#define HID_USAGE_AUXDISP_ATTRIBUTE_READBACK (0x49) // SF +#define HID_USAGE_AUXDISP_ATTRIBUTE_DATA (0x4A) // DV +#define HID_USAGE_AUXDISP_CHAR_ATTR_ENHANCE (0x4B) // OOC +#define HID_USAGE_AUXDISP_CHAR_ATTR_UNDERLINE (0x4C) // OOC +#define HID_USAGE_AUXDISP_CHAR_ATTR_BLINK (0x4D) // OOC +#define HID_USAGE_AUXDISP_BITMAP_SIZE_X (0x80) // SV +#define HID_USAGE_AUXDISP_BITMAP_SIZE_Y (0x81) // SV +#define HID_USAGE_AUXDISP_MAX_BLIT_SIZE (0x82) // SV +#define HID_USAGE_AUXDISP_BIT_DEPTH_FORMAT (0x83) // SV +#define HID_USAGE_AUXDISP_DISPLAY_ORIENTATION (0x84) // DV +#define HID_USAGE_AUXDISP_PALETTE_REPORT (0x85) // CL +#define HID_USAGE_AUXDISP_PALETTE_DATA_SIZE (0x86) // SV +#define HID_USAGE_AUXDISP_PALETTE_DATA_OFFSET (0x87) // SV +#define HID_USAGE_AUXDISP_PALETTE_DATA (0x88) // Buffered Bytes +#define HID_USAGE_AUXDISP_BLIT_REPORT (0x8A) // CL +#define HID_USAGE_AUXDISP_BLIT_RECTANGLE_X1 (0x8B) // SV +#define HID_USAGE_AUXDISP_BLIT_RECTANGLE_Y1 (0x8C) // SV +#define HID_USAGE_AUXDISP_BLIT_RECTANGLE_X2 (0x8D) // SV +#define HID_USAGE_AUXDISP_BLIT_RECTANGLE_Y2 (0x8E) // SV +#define HID_USAGE_AUXDISP_BLIT_DATA (0x8F) // Buffered Bytes +#define HID_USAGE_AUXDISP_SOFT_BUTTON (0x90) // CL +#define HID_USAGE_AUXDISP_SOFT_BUTTON_ID (0x91) // SV +#define HID_USAGE_AUXDISP_SOFT_BUTTON_SIDE (0x92) // SV +#define HID_USAGE_AUXDISP_SOFT_BUTTON_OFFSET_1 (0x93) // SV +#define HID_USAGE_AUXDISP_SOFT_BUTTON_OFFSET_2 (0x94) // SV +#define HID_USAGE_AUXDISP_SOFT_BUTTON_REPORT (0x95) // SV +#define HID_USAGE_AUXDISP_SOFT_KEYS (0xC2) // SV +#define HID_USAGE_AUXDISP_DISPLAY_DATA_EXTENSIONS (0xCC) // SF +#define HID_USAGE_AUXDISP_CHARACTER_MAPPING (0xCF) // SV +#define HID_USAGE_AUXDISP_UNICODE_EQUIVALENT (0xDD) // SV +#define HID_USAGE_AUXDISP_CHARACTER_PAGE_MAPPING (0xDF) // SV +#define HID_USAGE_AUXDISP_REQUEST_REPORT (0xFF) // DV + +/* Page 0x20: Sensors */ +#define HID_USAGE_SENSORS_UNDEFINED (0x00) +#define HID_USAGE_SENSORS_SENSOR (0x01) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC (0x10) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_PRESENCE (0x11) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_PROXIMITY (0x12) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_HUMAN_TOUCH (0x13) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_BLOOD_PRESSURE (0x14) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_BODY_TEMPERATURE (0x15) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_HEART_RATE (0x16) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_HEART_RATE_VARIABILITY (0x17) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_PERIPHERAL_OXYGEN_SATURATION (0x18) // CA, CP +#define HID_USAGE_SENSORS_BIOMETRIC_RESPIRATORY_RATE (0x19) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL (0x20) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_CAPACITANCE (0x21) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_CURRENT (0x22) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_POWER (0x23) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_INDUCTANCE (0x24) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_RESISTANCE (0x25) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_VOLTAGE (0x26) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_POTENTIOMETER (0x27) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_FREQUENCY (0x28) // CA, CP +#define HID_USAGE_SENSORS_ELECTRICAL_PERIOD (0x29) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL (0x30) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_ATMOSPHERIC_PRESSURE (0x31) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_HUMIDITY (0x32) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_TEMPERATURE (0x33) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_WIND_DIRECTION (0x34) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_WIND_SPEED (0x35) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_AIR_QUALITY (0x36) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_HEAT_INDEX (0x37) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_SURFACE_TEMPERATURE (0x38) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_VOLATILE_ORGANIC_COMPOUNDS (0x39) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_OBJECT_PRESENCE (0x3A) // CA, CP +#define HID_USAGE_SENSORS_ENVIRONMENTAL_OBJECT_PROXIMITY (0x3B) // CA, CP +#define HID_USAGE_SENSORS_LIGHT (0x40) // CA, CP +#define HID_USAGE_SENSORS_LIGHT_AMBIENT_LIGHT (0x41) // CA, CP +#define HID_USAGE_SENSORS_LIGHT_CONSUMER_INFRARED (0x42) // CA, CP +#define HID_USAGE_SENSORS_LIGHT_INFRARED_LIGHT (0x43) // CA, CP +#define HID_USAGE_SENSORS_LIGHT_VISIBLE_LIGHT (0x44) // CA, CP +#define HID_USAGE_SENSORS_LIGHT_ULTRAVIOLET_LIGHT (0x45) // CA, CP +#define HID_USAGE_SENSORS_LOCATION (0x50) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_BROADCAST (0x51) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_DEAD_RECKONING (0x52) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_GPS_GLOBAL_POSITIONING_SYSTEM (0x53) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_LOOKUP (0x54) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_OTHER (0x55) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_STATIC (0x56) // CA, CP +#define HID_USAGE_SENSORS_LOCATION_TRIANGULATION (0x57) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL (0x60) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_BOOLEAN_SWITCH (0x61) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_BOOLEAN_SWITCH_ARRAY (0x62) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_MULTIVALUE_SWITCH (0x63) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_FORCE (0x64) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_PRESSURE (0x65) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_STRAIN (0x66) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_WEIGHT (0x67) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_HAPTIC_VIBRATOR (0x68) // CA, CP +#define HID_USAGE_SENSORS_MECHANICAL_HALL_EFFECT_SWITCH (0x69) // CA, CP +#define HID_USAGE_SENSORS_MOTION (0x70) // CA, CP +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_1D (0x71) // CA, CP +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_2D (0x72) // CA, CP +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER_3D (0x73) // CA, CP +#define HID_USAGE_SENSORS_MOTION_GYROMETER_1D (0x74) // CA, CP +#define HID_USAGE_SENSORS_MOTION_GYROMETER_2D (0x75) // CA, CP +#define HID_USAGE_SENSORS_MOTION_GYROMETER_3D (0x76) // CA, CP +#define HID_USAGE_SENSORS_MOTION_MOTION_DETECTOR (0x77) // CA, CP +#define HID_USAGE_SENSORS_MOTION_SPEEDOMETER (0x78) // CA, CP +#define HID_USAGE_SENSORS_MOTION_ACCELEROMETER (0x79) // CA, CP +#define HID_USAGE_SENSORS_MOTION_GYROMETER (0x7A) // CA, CP +#define HID_USAGE_SENSORS_MOTION_GRAVITY_VECTOR (0x7B) // CA, CP +#define HID_USAGE_SENSORS_MOTION_LINEAR_ACCELEROMETER (0x7C) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION (0x80) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_1D (0x81) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_2D (0x82) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS_3D (0x83) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_1D (0x84) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_2D (0x85) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER_3D (0x86) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_1D (0x87) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_2D (0x88) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE_3D (0x89) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_DEVICE_ORIENTATION (0x8A) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_COMPASS (0x8B) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_INCLINOMETER (0x8C) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_DISTANCE (0x8D) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_RELATIVE_ORIENTATION (0x8E) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_SIMPLE_ORIENTATION (0x8F) // CA, CP +#define HID_USAGE_SENSORS_SCANNER (0x90) // CA, CP +#define HID_USAGE_SENSORS_SCANNER_BARCODE (0x91) // CA, CP +#define HID_USAGE_SENSORS_SCANNER_RFID (0x92) // CA, CP +#define HID_USAGE_SENSORS_SCANNER_NFC (0x93) // CA, CP +#define HID_USAGE_SENSORS_TIME (0xA0) // CA, CP +#define HID_USAGE_SENSORS_TIME_ALARM_TIMER (0xA1) // CA, CP +#define HID_USAGE_SENSORS_TIME_REAL_TIME_CLOCK (0xA2) // CA, CP +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY (0xB0) // CA, CP +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_ACTIVITY_DETECTION (0xB1) // CA, CP +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_DEVICE_POSITION (0xB2) // CA, CP +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_PEDOMETER (0xB3) // CA, CP +#define HID_USAGE_SENSORS_PERSONAL_ACTIVITY_STEP_DETECTION (0xB4) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED (0xC0) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED_GEOMAGNETIC_ORIENTATION (0xC1) // CA, CP +#define HID_USAGE_SENSORS_ORIENTATION_EXTENDED_MAGNETOMETER (0xC2) // CA, CP +#define HID_USAGE_SENSORS_GESTURE (0xD0) // CA, CP +#define HID_USAGE_SENSORS_GESTURE_CHASSIS_FLIP_GESTURE (0xD1) // CA, CP +#define HID_USAGE_SENSORS_GESTURE_HINGE_FOLD_GESTURE (0xD2) // CA, CP +#define HID_USAGE_SENSORS_OTHER (0xE0) // CA, CP +#define HID_USAGE_SENSORS_OTHER_CUSTOM (0xE1) // CA, CP +#define HID_USAGE_SENSORS_OTHER_GENERIC (0xE2) // CA, CP +#define HID_USAGE_SENSORS_OTHER_GENERIC_ENUMERATOR (0xE3) // CA, CP +#define HID_USAGE_SENSORS_OTHER_HINGE_ANGLE (0xE4) // CA, CP +#define HID_USAGE_SENSORS_EVENT (0x200) // DV +#define HID_USAGE_SENSORS_EVENT_SENSOR_STATE (0x201) // NAry +#define HID_USAGE_SENSORS_EVENT_SENSOR_EVENT (0x202) // NAry +#define HID_USAGE_SENSORS_PROPERTY (0x300) // DV +#define HID_USAGE_SENSORS_PROPERTY_FRIENDLY_NAME (0x301) // SV +#define HID_USAGE_SENSORS_PROPERTY_PERSISTENT_UNIQUE_ID (0x302) // DV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_STATUS (0x303) // DV +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM_REPORT_INTERVAL (0x304) // SV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_MANUFACTURER (0x305) // SV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_MODEL (0x306) // SV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_SERIAL_NUMBER (0x307) // SV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_DESCRIPTION (0x308) // SV +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_CONNECTION_TYPE (0x309) // NAry +#define HID_USAGE_SENSORS_PROPERTY_SENSOR_DEVICE_PATH (0x30A) // DV +#define HID_USAGE_SENSORS_PROPERTY_HARDWARE_REVISION (0x30B) // SV +#define HID_USAGE_SENSORS_PROPERTY_FIRMWARE_VERSION (0x30C) // SV +#define HID_USAGE_SENSORS_PROPERTY_RELEASE_DATE (0x30D) // SV +#define HID_USAGE_SENSORS_PROPERTY_REPORT_INTERVAL (0x30E) // DV +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_ABSOLUTE (0x30F) // DV +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_PERCENT_OF_RANGE (0x310) // DV +#define HID_USAGE_SENSORS_PROPERTY_CHANGE_SENSITIVITY_PERCENT_RELATIVE (0x311) // DV +#define HID_USAGE_SENSORS_PROPERTY_ACCURACY (0x312) // DV +#define HID_USAGE_SENSORS_PROPERTY_RESOLUTION (0x313) // DV +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM (0x314) // DV +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM (0x315) // DV +#define HID_USAGE_SENSORS_PROPERTY_REPORTING_STATE (0x316) // NAry +#define HID_USAGE_SENSORS_PROPERTY_SAMPLING_RATE (0x317) // DV +#define HID_USAGE_SENSORS_PROPERTY_RESPONSE_CURVE (0x318) // DV +#define HID_USAGE_SENSORS_PROPERTY_POWER_STATE (0x319) // NAry +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM_FIFO_EVENTS (0x31A) // SV +#define HID_USAGE_SENSORS_PROPERTY_REPORT_LATENCY (0x31B) // DV +#define HID_USAGE_SENSORS_PROPERTY_FLUSH_FIFO_EVENTS (0x31C) // DF +#define HID_USAGE_SENSORS_PROPERTY_MAXIMUM_POWER_CONSUMPTION (0x31D) // DV +#define HID_USAGE_SENSORS_PROPERTY_IS_PRIMARY (0x31E) // DF +#define HID_USAGE_SENSORS_DATA_FIELD_LOCATION (0x400) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ANTENNA_SEA_LEVEL (0x402) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DIFFERENTIAL_REFERENCE_STATION_ID (0x403) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ELLIPSOID_ERROR (0x404) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_ELLIPSOID (0x405) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_SEA_LEVEL_ERROR (0x406) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ALTITUDE_SEA_LEVEL (0x407) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DIFFERENTIAL_GPS_DATA_AGE (0x408) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ERROR_RADIUS (0x409) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_FIX_QUALITY (0x40A) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_FIX_TYPE (0x40B) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GEOIDAL_SEPARATION (0x40C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_OPERATION_MODE (0x40D) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_SELECTION_MODE (0x40E) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GPS_STATUS (0x40F) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_POSITION_DILUTION_OF_PRECISION (0x410) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HORIZONTAL_DILUTION_OF_PRECISION (0x411) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_VERTICAL_DILUTION_OF_PRECISION (0x412) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_LATITUDE (0x413) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_LONGITUDE (0x414) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TRUE_HEADING (0x415) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_HEADING (0x416) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_VARIATION (0x417) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SPEED (0x418) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW (0x419) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_AZIMUTH (0x41A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_ELEVATION (0x41B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_IDS (0x41C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_PRNS (0x41D) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_IN_VIEW_S_N_RATIOS (0x41E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_USED_COUNT (0x41F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SATELLITES_USED_PRNS (0x420) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_NMEA_SENTENCE (0x421) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ADDRESS_LINE_1 (0x422) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ADDRESS_LINE_2 (0x423) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CITY (0x424) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_STATE_OR_PROVINCE (0x425) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_COUNTRY_OR_REGION (0x426) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_POSTAL_CODE (0x427) // SV +#define HID_USAGE_SENSORS_PROPERTY_LOCATION (0x42A) // DV +#define HID_USAGE_SENSORS_PROPERTY_LOCATION_DESIRED_ACCURACY (0x42B) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_ENVIRONMENTAL (0x430) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ATMOSPHERIC_PRESSURE (0x431) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_RELATIVE_HUMIDITY (0x433) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TEMPERATURE (0x434) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_WIND_DIRECTION (0x435) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_WIND_SPEED (0x436) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_AIR_QUALITY_INDEX (0x437) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_EQUIVALENT_CO2 (0x438) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_VOLATILE_ORGANIC_COMPOUND_CONCENTRATION (0x439) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PRESENCE (0x43A) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PROXIMITY_RANGE (0x43B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_OBJECT_PROXIMITY_OUT_OF_RANGE (0x43C) // SF +#define HID_USAGE_SENSORS_PROPERTY_ENVIRONMENTAL (0x440) // SV +#define HID_USAGE_SENSORS_PROPERTY_REFERENCE_PRESSURE (0x441) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION (0x450) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_STATE (0x451) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION (0x452) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_X (0x453) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_Y (0x454) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ACCELERATION_AXIS_Z (0x455) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY (0x456) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_X_AXIS (0x457) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_Y_AXIS (0x458) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_VELOCITY_ABOUT_Z_AXIS (0x459) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION (0x45A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_X_AXIS (0x45B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_Y_AXIS (0x45C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ANGULAR_POSITION_ABOUT_Z_AXIS (0x45D) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_SPEED (0x45E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MOTION_INTENSITY (0x45F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ORIENTATION (0x470) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING (0x471) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_X_AXIS (0x472) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_Y_AXIS (0x473) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_Z_AXIS (0x474) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_COMPENSATED_MAGNETIC_NORTH (0x475) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_COMPENSATED_TRUE_NORTH (0x476) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_MAGNETIC_NORTH (0x477) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEADING_TRUE_NORTH (0x478) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE (0x479) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_X_AXIS (0x47A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_Y_AXIS (0x47B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_Z_AXIS (0x47C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DISTANCE_OUT_OF_RANGE (0x47D) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_TILT (0x47E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_X_AXIS (0x47F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_Y_AXIS (0x480) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TILT_Z_AXIS (0x481) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ROTATION_MATRIX (0x482) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_QUATERNION (0x483) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX (0x484) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_X_AXIS (0x485) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_Y_AXIS (0x486) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETIC_FLUX_Z_AXIS (0x487) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MAGNETOMETER_ACCURACY (0x488) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_SIMPLE_ORIENTATION_DIRECTION (0x489) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_MECHANICAL (0x490) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_BOOLEAN_SWITCH_STATE (0x491) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_BOOLEAN_SWITCH_ARRAY_STATES (0x492) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MULTIVALUE_SWITCH_VALUE (0x493) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_FORCE (0x494) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ABSOLUTE_PRESSURE (0x495) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GAUGE_PRESSURE (0x496) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_STRAIN (0x497) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_WEIGHT (0x498) // SV +#define HID_USAGE_SENSORS_PROPERTY_MECHANICAL (0x4A0) // DV +#define HID_USAGE_SENSORS_PROPERTY_VIBRATION_STATE (0x4A1) // DF +#define HID_USAGE_SENSORS_PROPERTY_FORWARD_VIBRATION_SPEED (0x4A2) // DV +#define HID_USAGE_SENSORS_PROPERTY_BACKWARD_VIBRATION_SPEED (0x4A3) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_BIOMETRIC (0x4B0) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PRESENCE (0x4B1) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PROXIMITY_RANGE (0x4B2) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_PROXIMITY_OUT_OF_RANGE (0x4B3) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_HUMAN_TOUCH_STATE (0x4B4) // SF +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE (0x4B5) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE_DIASTOLIC (0x4B6) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_BLOOD_PRESSURE_SYSTOLIC (0x4B7) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEART_RATE (0x4B8) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_RESTING_HEART_RATE (0x4B9) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HEARTBEAT_INTERVAL (0x4BA) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_RESPIRATORY_RATE (0x4BB) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SPO2 (0x4BC) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_LIGHT (0x4D0) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_ILLUMINANCE (0x4D1) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_COLOR_TEMPERATURE (0x4D2) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY (0x4D3) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY_X (0x4D4) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CHROMATICITY_Y (0x4D5) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CONSUMER_IR_SENTENCE_RECEIVE (0x4D6) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_INFRARED_LIGHT (0x4D7) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_RED_LIGHT (0x4D8) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GREEN_LIGHT (0x4D9) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_BLUE_LIGHT (0x4DA) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_A_LIGHT (0x4DB) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_B_LIGHT (0x4DC) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ULTRAVIOLET_INDEX (0x4DD) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_NEAR_INFRARED_LIGHT (0x4DE) // SV +#define HID_USAGE_SENSORS_PROPERTY_LIGHT (0x4DF) // DV +#define HID_USAGE_SENSORS_PROPERTY_CONSUMER_IR_SENTENCE_SEND (0x4E0) // DV +#define HID_USAGE_SENSORS_PROPERTY_AUTO_BRIGHTNESS_PREFERRED (0x4E2) // DF +#define HID_USAGE_SENSORS_PROPERTY_AUTO_COLOR_PREFERRED (0x4E3) // DF +#define HID_USAGE_SENSORS_DATA_FIELD_SCANNER (0x4F0) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_RFID_TAG_40_BIT (0x4F1) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_NFC_SENTENCE_RECEIVE (0x4F2) // SV +#define HID_USAGE_SENSORS_PROPERTY_SCANNER (0x4F8) // DV +#define HID_USAGE_SENSORS_PROPERTY_NFC_SENTENCE_SEND (0x4F9) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ELECTRICAL (0x500) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CAPACITANCE (0x501) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CURRENT (0x502) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ELECTRICAL_POWER (0x503) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_INDUCTANCE (0x504) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_RESISTANCE (0x505) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_VOLTAGE (0x506) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_FREQUENCY (0x507) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_PERIOD (0x508) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_PERCENT_OF_RANGE (0x509) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TIME (0x520) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_YEAR (0x521) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MONTH (0x522) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DAY (0x523) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_DAY_OF_WEEK (0x524) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_HOUR (0x525) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MINUTE (0x526) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_SECOND (0x527) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_MILLISECOND (0x528) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TIMESTAMP (0x529) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_JULIAN_DAY_OF_YEAR (0x52A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_TIME_SINCE_SYSTEM_BOOT (0x52B) // SV +#define HID_USAGE_SENSORS_PROPERTY_TIME (0x530) // DV +#define HID_USAGE_SENSORS_PROPERTY_TIME_ZONE_OFFSET_FROM_UTC (0x531) // DV +#define HID_USAGE_SENSORS_PROPERTY_TIME_ZONE_NAME (0x532) // DV +#define HID_USAGE_SENSORS_PROPERTY_DAYLIGHT_SAVINGS_TIME_OBSERVED (0x533) // DF +#define HID_USAGE_SENSORS_PROPERTY_TIME_TRIM_ADJUSTMENT (0x534) // DV +#define HID_USAGE_SENSORS_PROPERTY_ARM_ALARM (0x535) // DF +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM (0x540) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_USAGE (0x541) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_BOOLEAN_ARRAY (0x542) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE (0x543) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_1 (0x544) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_2 (0x545) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_3 (0x546) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_4 (0x547) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_5 (0x548) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_6 (0x549) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_7 (0x54A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_8 (0x54B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_9 (0x54C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_10 (0x54D) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_11 (0x54E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_12 (0x54F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_13 (0x550) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_14 (0x551) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_15 (0x552) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_16 (0x553) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_17 (0x554) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_18 (0x555) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_19 (0x556) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_20 (0x557) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_21 (0x558) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_22 (0x559) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_23 (0x55A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_24 (0x55B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_25 (0x55C) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_26 (0x55D) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_27 (0x55E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_VALUE_28 (0x55F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC (0x560) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID_OR_PROPERTYKEY (0x561) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_CATEGORY_GUID (0x562) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_TYPE_GUID (0x563) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_EVENT_PROPERTYKEY (0x564) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTY_PROPERTYKEY (0x565) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_DATA_FIELD_PROPERTYKEY (0x566) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_EVENT (0x567) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTY (0x568) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_DATA_FIELD (0x569) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ENUMERATOR_TABLE_ROW_INDEX (0x56A) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_ENUMERATOR_TABLE_ROW_COUNT (0x56B) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID_OR_PROPERTYKEY_KIND (0x56C) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_GUID (0x56D) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_PROPERTYKEY (0x56E) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_TOP_LEVEL_COLLECTION_ID (0x56F) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_ID (0x570) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_ITEM_POSITION_INDEX (0x571) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_FIRMWARE_VARTYPE (0x572) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_UNIT_OF_MEASURE (0x573) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_UNIT_EXPONENT (0x574) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_SIZE (0x575) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_GENERIC_REPORT_COUNT (0x576) // SV +#define HID_USAGE_SENSORS_PROPERTY_GENERIC (0x580) // DV +#define HID_USAGE_SENSORS_PROPERTY_ENUMERATOR_TABLE_ROW_INDEX (0x581) // DV +#define HID_USAGE_SENSORS_PROPERTY_ENUMERATOR_TABLE_ROW_COUNT (0x582) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_PERSONAL_ACTIVITY (0x590) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_ACTIVITY_TYPE (0x591) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_ACTIVITY_STATE (0x592) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_DEVICE_POSITION (0x593) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_COUNT (0x594) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_COUNT_RESET (0x595) // DF +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_DURATION (0x596) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_STEP_TYPE (0x597) // NAry +#define HID_USAGE_SENSORS_PROPERTY_MINIMUM_ACTIVITY_DETECTION_INTERVAL (0x5A0) // DV +#define HID_USAGE_SENSORS_PROPERTY_SUPPORTED_ACTIVITY_TYPES (0x5A1) // NAry +#define HID_USAGE_SENSORS_PROPERTY_SUBSCRIBED_ACTIVITY_TYPES (0x5A2) // NAry +#define HID_USAGE_SENSORS_PROPERTY_SUPPORTED_STEP_TYPES (0x5A3) // NAry +#define HID_USAGE_SENSORS_PROPERTY_SUBSCRIBED_STEP_TYPES (0x5A4) // NAry +#define HID_USAGE_SENSORS_PROPERTY_FLOOR_HEIGHT (0x5A5) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_CUSTOM_TYPE_ID (0x5B0) // SV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM (0x5C0) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_1 (0x5C1) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_2 (0x5C2) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_3 (0x5C3) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_4 (0x5C4) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_5 (0x5C5) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_6 (0x5C6) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_7 (0x5C7) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_8 (0x5C8) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_9 (0x5C9) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_10 (0x5CA) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_11 (0x5CB) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_12 (0x5CC) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_13 (0x5CD) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_14 (0x5CE) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_15 (0x5CF) // DV +#define HID_USAGE_SENSORS_PROPERTY_CUSTOM_VALUE_16 (0x5D0) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE (0x5E0) // SV, DV +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_ANGLE (0x5E1) // SV, DV +#define HID_USAGE_SENSORS_DATA_FIELD_GESTURE_SENSOR (0x5F0) // DV +#define HID_USAGE_SENSORS_DATA_FIELD_GESTURE_STATE (0x5F1) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_INITIAL_ANGLE (0x5F2) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_FINAL_ANGLE (0x5F3) // SV +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_CONTRIBUTING_PANEL (0x5F4) // NAry +#define HID_USAGE_SENSORS_DATA_FIELD_HINGE_FOLD_TYPE (0x5F5) // NAry +#define HID_USAGE_SENSORS_SENSOR_STATE_UNDEFINED (0x800) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_READY (0x801) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_NOT_AVAILABLE (0x802) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_NO_DATA (0x803) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_INITIALIZING (0x804) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_ACCESS_DENIED (0x805) // Sel +#define HID_USAGE_SENSORS_SENSOR_STATE_ERROR (0x806) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_UNKNOWN (0x810) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_STATE_CHANGED (0x811) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_PROPERTY_CHANGED (0x812) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_DATA_UPDATED (0x813) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_POLL_RESPONSE (0x814) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_CHANGE_SENSITIVITY (0x815) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_RANGE_MAXIMUM_REACHED (0x816) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_RANGE_MINIMUM_REACHED (0x817) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_UPWARD (0x818) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_HIGH_THRESHOLD_CROSS_DOWNWARD (0x819) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_LOW_THRESHOLD_CROSS_UPWARD (0x81A) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_LOW_THRESHOLD_CROSS_DOWNWARD (0x81B) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_UPWARD (0x81C) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_ZERO_THRESHOLD_CROSS_DOWNWARD (0x81D) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_PERIOD_EXCEEDED (0x81E) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_FREQUENCY_EXCEEDED (0x81F) // Sel +#define HID_USAGE_SENSORS_SENSOR_EVENT_COMPLEX_TRIGGER (0x820) // Sel +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_INTEGRATED (0x830) // Sel +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_ATTACHED (0x831) // Sel +#define HID_USAGE_SENSORS_CONNECTION_TYPE_PC_EXTERNAL (0x832) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_NO_EVENTS (0x840) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_ALL_EVENTS (0x841) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_REPORT_THRESHOLD_EVENTS (0x842) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_NO_EVENTS (0x843) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_ALL_EVENTS (0x844) // Sel +#define HID_USAGE_SENSORS_REPORTING_STATE_WAKE_ON_THRESHOLD_EVENTS (0x845) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_UNDEFINED (0x850) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_D0_FULL_POWER (0x851) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_D1_LOW_POWER (0x852) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_D2_STANDBY_POWER_WITH_WAKEUP (0x853) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_D3_SLEEP_WITH_WAKEUP (0x854) // Sel +#define HID_USAGE_SENSORS_POWER_STATE_D4_POWER_OFF (0x855) // Sel +#define HID_USAGE_SENSORS_FIX_QUALITY_NO_FIX (0x870) // Sel +#define HID_USAGE_SENSORS_FIX_QUALITY_GPS (0x871) // Sel +#define HID_USAGE_SENSORS_FIX_QUALITY_DGPS (0x872) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_NO_FIX (0x880) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_GPS_SPS_MODE_FIX_VALID (0x881) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_DGPS_SPS_MODE_FIX_VALID (0x882) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_GPS_PPS_MODE_FIX_VALID (0x883) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_REAL_TIME_KINEMATIC (0x884) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_FLOAT_RTK (0x885) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_ESTIMATED_DEAD_RECKONED (0x886) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_MANUAL_INPUT_MODE (0x887) // Sel +#define HID_USAGE_SENSORS_FIX_TYPE_SIMULATOR_MODE (0x888) // Sel +#define HID_USAGE_SENSORS_GPS_OPERATION_MODE_MANUAL (0x890) // Sel +#define HID_USAGE_SENSORS_GPS_OPERATION_MODE_AUTOMATIC (0x891) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_AUTONOMOUS (0x8A0) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_DGPS (0x8A1) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_ESTIMATED_DEAD_RECKONED (0x8A2) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_MANUAL_INPUT (0x8A3) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_SIMULATOR (0x8A4) // Sel +#define HID_USAGE_SENSORS_GPS_SELECTION_MODE_DATA_NOT_VALID (0x8A5) // Sel +#define HID_USAGE_SENSORS_GPS_STATUS_DATA_VALID (0x8B0) // Sel +#define HID_USAGE_SENSORS_GPS_STATUS_DATA_NOT_VALID (0x8B1) // Sel +#define HID_USAGE_SENSORS_ACCURACY_DEFAULT (0x860) // Sel +#define HID_USAGE_SENSORS_ACCURACY_HIGH (0x861) // Sel +#define HID_USAGE_SENSORS_ACCURACY_MEDIUM (0x862) // Sel +#define HID_USAGE_SENSORS_ACCURACY_LOW (0x863) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_SUNDAY (0x8C0) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_MONDAY (0x8C1) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_TUESDAY (0x8C2) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_WEDNESDAY (0x8C3) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_THURSDAY (0x8C4) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_FRIDAY (0x8C5) // Sel +#define HID_USAGE_SENSORS_DAY_OF_WEEK_SATURDAY (0x8C6) // Sel +#define HID_USAGE_SENSORS_KIND_CATEGORY (0x8D0) // Sel +#define HID_USAGE_SENSORS_KIND_TYPE (0x8D1) // Sel +#define HID_USAGE_SENSORS_KIND_EVENT (0x8D2) // Sel +#define HID_USAGE_SENSORS_KIND_PROPERTY (0x8D3) // Sel +#define HID_USAGE_SENSORS_KIND_DATA_FIELD (0x8D4) // Sel +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_LOW (0x8E0) // Sel +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_MEDIUM (0x8E1) // Sel +#define HID_USAGE_SENSORS_MAGNETOMETER_ACCURACY_HIGH (0x8E2) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_NOT_ROTATED (0x8F0) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_90_DEGREES_CCW (0x8F1) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_180_DEGREES_CCW (0x8F2) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_ROTATED_270_DEGREES_CCW (0x8F3) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_FACE_UP (0x8F4) // Sel +#define HID_USAGE_SENSORS_SIMPLE_ORIENTATION_DIRECTION_FACE_DOWN (0x8F5) // Sel +#define HID_USAGE_SENSORS_VT_NULL (0x900) // Sel +#define HID_USAGE_SENSORS_VT_BOOL (0x901) // Sel +#define HID_USAGE_SENSORS_VT_UI1 (0x902) // Sel +#define HID_USAGE_SENSORS_VT_I1 (0x903) // Sel +#define HID_USAGE_SENSORS_VT_UI2 (0x904) // Sel +#define HID_USAGE_SENSORS_VT_I2 (0x905) // Sel +#define HID_USAGE_SENSORS_VT_UI4 (0x906) // Sel +#define HID_USAGE_SENSORS_VT_I4 (0x907) // Sel +#define HID_USAGE_SENSORS_VT_UI8 (0x908) // Sel +#define HID_USAGE_SENSORS_VT_I8 (0x909) // Sel +#define HID_USAGE_SENSORS_VT_R4 (0x90A) // Sel +#define HID_USAGE_SENSORS_VT_R8 (0x90B) // Sel +#define HID_USAGE_SENSORS_VT_WSTR (0x90C) // Sel +#define HID_USAGE_SENSORS_VT_STR (0x90D) // Sel +#define HID_USAGE_SENSORS_VT_CLSID (0x90E) // Sel +#define HID_USAGE_SENSORS_VT_VECTOR_VT_UI1 (0x90F) // Sel +#define HID_USAGE_SENSORS_VT_F16E0 (0x910) // Sel +#define HID_USAGE_SENSORS_VT_F16E1 (0x911) // Sel +#define HID_USAGE_SENSORS_VT_F16E2 (0x912) // Sel +#define HID_USAGE_SENSORS_VT_F16E3 (0x913) // Sel +#define HID_USAGE_SENSORS_VT_F16E4 (0x914) // Sel +#define HID_USAGE_SENSORS_VT_F16E5 (0x915) // Sel +#define HID_USAGE_SENSORS_VT_F16E6 (0x916) // Sel +#define HID_USAGE_SENSORS_VT_F16E7 (0x917) // Sel +#define HID_USAGE_SENSORS_VT_F16E8 (0x918) // Sel +#define HID_USAGE_SENSORS_VT_F16E9 (0x919) // Sel +#define HID_USAGE_SENSORS_VT_F16EA (0x91A) // Sel +#define HID_USAGE_SENSORS_VT_F16EB (0x91B) // Sel +#define HID_USAGE_SENSORS_VT_F16EC (0x91C) // Sel +#define HID_USAGE_SENSORS_VT_F16ED (0x91D) // Sel +#define HID_USAGE_SENSORS_VT_F16EE (0x91E) // Sel +#define HID_USAGE_SENSORS_VT_F16EF (0x91F) // Sel +#define HID_USAGE_SENSORS_VT_F32E0 (0x920) // Sel +#define HID_USAGE_SENSORS_VT_F32E1 (0x921) // Sel +#define HID_USAGE_SENSORS_VT_F32E2 (0x922) // Sel +#define HID_USAGE_SENSORS_VT_F32E3 (0x923) // Sel +#define HID_USAGE_SENSORS_VT_F32E4 (0x924) // Sel +#define HID_USAGE_SENSORS_VT_F32E5 (0x925) // Sel +#define HID_USAGE_SENSORS_VT_F32E6 (0x926) // Sel +#define HID_USAGE_SENSORS_VT_F32E7 (0x927) // Sel +#define HID_USAGE_SENSORS_VT_F32E8 (0x928) // Sel +#define HID_USAGE_SENSORS_VT_F32E9 (0x929) // Sel +#define HID_USAGE_SENSORS_VT_F32EA (0x92A) // Sel +#define HID_USAGE_SENSORS_VT_F32EB (0x92B) // Sel +#define HID_USAGE_SENSORS_VT_F32EC (0x92C) // Sel +#define HID_USAGE_SENSORS_VT_F32ED (0x92D) // Sel +#define HID_USAGE_SENSORS_VT_F32EE (0x92E) // Sel +#define HID_USAGE_SENSORS_VT_F32EF (0x92F) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_UNKNOWN (0x930) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_STATIONARY (0x931) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_FIDGETING (0x932) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_WALKING (0x933) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_RUNNING (0x934) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_IN_VEHICLE (0x935) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_BIKING (0x936) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_TYPE_IDLE (0x937) // Sel +#define HID_USAGE_SENSORS_UNIT_NOT_SPECIFIED (0x940) // Sel +#define HID_USAGE_SENSORS_UNIT_LUX (0x941) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_KELVIN (0x942) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_CELSIUS (0x943) // Sel +#define HID_USAGE_SENSORS_UNIT_PASCAL (0x944) // Sel +#define HID_USAGE_SENSORS_UNIT_NEWTON (0x945) // Sel +#define HID_USAGE_SENSORS_UNIT_METERS_SECOND (0x946) // Sel +#define HID_USAGE_SENSORS_UNIT_KILOGRAM (0x947) // Sel +#define HID_USAGE_SENSORS_UNIT_METER (0x948) // Sel +#define HID_USAGE_SENSORS_UNIT_METERS_SECOND_SECOND (0x949) // Sel +#define HID_USAGE_SENSORS_UNIT_FARAD (0x94A) // Sel +#define HID_USAGE_SENSORS_UNIT_AMPERE (0x94B) // Sel +#define HID_USAGE_SENSORS_UNIT_WATT (0x94C) // Sel +#define HID_USAGE_SENSORS_UNIT_HENRY (0x94D) // Sel +#define HID_USAGE_SENSORS_UNIT_OHM (0x94E) // Sel +#define HID_USAGE_SENSORS_UNIT_VOLT (0x94F) // Sel +#define HID_USAGE_SENSORS_UNIT_HERTZ (0x950) // Sel +#define HID_USAGE_SENSORS_UNIT_BAR (0x951) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_ANTI_CLOCKWISE (0x952) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_CLOCKWISE (0x953) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES (0x954) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_SECOND (0x955) // Sel +#define HID_USAGE_SENSORS_UNIT_DEGREES_SECOND_SECOND (0x956) // Sel +#define HID_USAGE_SENSORS_UNIT_KNOT (0x957) // Sel +#define HID_USAGE_SENSORS_UNIT_PERCENT (0x958) // Sel +#define HID_USAGE_SENSORS_UNIT_SECOND (0x959) // Sel +#define HID_USAGE_SENSORS_UNIT_MILLISECOND (0x95A) // Sel +#define HID_USAGE_SENSORS_UNIT_G (0x95B) // Sel +#define HID_USAGE_SENSORS_UNIT_BYTES (0x95C) // Sel +#define HID_USAGE_SENSORS_UNIT_MILLIGAUSS (0x95D) // Sel +#define HID_USAGE_SENSORS_UNIT_BITS (0x95E) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_STATE_NO_STATE_CHANGE (0x960) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_STATE_START_ACTIVITY (0x961) // Sel +#define HID_USAGE_SENSORS_ACTIVITY_STATE_END_ACTIVITY (0x962) // Sel +#define HID_USAGE_SENSORS_EXPONENT_0 (0x970) // Sel +#define HID_USAGE_SENSORS_EXPONENT_1 (0x971) // Sel +#define HID_USAGE_SENSORS_EXPONENT_2 (0x972) // Sel +#define HID_USAGE_SENSORS_EXPONENT_3 (0x973) // Sel +#define HID_USAGE_SENSORS_EXPONENT_4 (0x974) // Sel +#define HID_USAGE_SENSORS_EXPONENT_5 (0x975) // Sel +#define HID_USAGE_SENSORS_EXPONENT_6 (0x976) // Sel +#define HID_USAGE_SENSORS_EXPONENT_7 (0x977) // Sel +#define HID_USAGE_SENSORS_EXPONENT_8 (0x978) // Sel +#define HID_USAGE_SENSORS_EXPONENT_9 (0x979) // Sel +#define HID_USAGE_SENSORS_EXPONENT_A (0x97A) // Sel +#define HID_USAGE_SENSORS_EXPONENT_B (0x97B) // Sel +#define HID_USAGE_SENSORS_EXPONENT_C (0x97C) // Sel +#define HID_USAGE_SENSORS_EXPONENT_D (0x97D) // Sel +#define HID_USAGE_SENSORS_EXPONENT_E (0x97E) // Sel +#define HID_USAGE_SENSORS_EXPONENT_F (0x97F) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_UNKNOWN (0x980) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_UNCHANGED (0x981) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_ON_DESK (0x982) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_IN_HAND (0x983) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_MOVING_IN_BAG (0x984) // Sel +#define HID_USAGE_SENSORS_DEVICE_POSITION_STATIONARY_IN_BAG (0x985) // Sel +#define HID_USAGE_SENSORS_STEP_TYPE_UNKNOWN (0x990) // Sel +#define HID_USAGE_SENSORS_STEP_TYPE_RUNNING (0x991) // Sel +#define HID_USAGE_SENSORS_STEP_TYPE_WALKING (0x992) // Sel +#define HID_USAGE_SENSORS_GESTURE_STATE_UNKNOWN (0x9A0) // Sel +#define HID_USAGE_SENSORS_GESTURE_STATE_STARTED (0x9A1) // Sel +#define HID_USAGE_SENSORS_GESTURE_STATE_COMPLETED (0x9A2) // Sel +#define HID_USAGE_SENSORS_GESTURE_STATE_CANCELLED (0x9A3) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_UNKNOWN (0x9B0) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_PANEL_1 (0x9B1) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_PANEL_2 (0x9B2) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_CONTRIBUTING_PANEL_BOTH (0x9B3) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_UNKNOWN (0x9B4) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_INCREASING (0x9B5) // Sel +#define HID_USAGE_SENSORS_HINGE_FOLD_TYPE_DECREASING (0x9B6) // Sel +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_ABSOLUTE (0x1000) // US +#define HID_USAGE_SENSORS_MODIFIER_MAXIMUM (0x2000) // US +#define HID_USAGE_SENSORS_MODIFIER_MINIMUM (0x3000) // US +#define HID_USAGE_SENSORS_MODIFIER_ACCURACY (0x4000) // US +#define HID_USAGE_SENSORS_MODIFIER_RESOLUTION (0x5000) // US +#define HID_USAGE_SENSORS_MODIFIER_THRESHOLD_HIGH (0x6000) // US +#define HID_USAGE_SENSORS_MODIFIER_THRESHOLD_LOW (0x7000) // US +#define HID_USAGE_SENSORS_MODIFIER_CALIBRATION_OFFSET (0x8000) // US +#define HID_USAGE_SENSORS_MODIFIER_CALIBRATION_MULTIPLIER (0x9000) // US +#define HID_USAGE_SENSORS_MODIFIER_REPORT_INTERVAL (0xA000) // US +#define HID_USAGE_SENSORS_MODIFIER_FREQUENCY_MAX (0xB000) // US +#define HID_USAGE_SENSORS_MODIFIER_PERIOD_MAX (0xC000) // US +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_PERCENT_OF_RANGE (0xD000) // US +#define HID_USAGE_SENSORS_MODIFIER_CHANGE_SENSITIVITY_PERCENT_RELATIVE (0xE000) // US + +/* Page 0x40: Medical Instrument */ +#define HID_USAGE_MEDICAL_UNDEFINED (0x00) +#define HID_USAGE_MEDICAL_MEDICAL_ULTRASOUND (0x01) // CA +#define HID_USAGE_MEDICAL_VCR_ACQUISITION (0x20) // OOC +#define HID_USAGE_MEDICAL_FREEZE_THAW (0x21) // OOC +#define HID_USAGE_MEDICAL_CLIP_STORE (0x22) // OSC +#define HID_USAGE_MEDICAL_UPDATE (0x23) // OSC +#define HID_USAGE_MEDICAL_NEXT (0x24) // OSC +#define HID_USAGE_MEDICAL_SAVE (0x25) // OSC +#define HID_USAGE_MEDICAL_PRINT (0x26) // OSC +#define HID_USAGE_MEDICAL_MICROPHONE_ENABLE (0x27) // OSC +#define HID_USAGE_MEDICAL_CINE (0x40) // LC +#define HID_USAGE_MEDICAL_TRANSMIT_POWER (0x41) // LC +#define HID_USAGE_MEDICAL_VOLUME (0x42) // LC +#define HID_USAGE_MEDICAL_FOCUS (0x43) // LC +#define HID_USAGE_MEDICAL_DEPTH (0x44) // LC +#define HID_USAGE_MEDICAL_SOFT_STEP_MINUS_PRIMARY (0x60) // LC +#define HID_USAGE_MEDICAL_SOFT_STEP_MINUS_SECONDARY (0x61) // LC +#define HID_USAGE_MEDICAL_DEPTH_GAIN_COMPENSATION (0x70) // LC +#define HID_USAGE_MEDICAL_ZOOM_SELECT (0x80) // OSC +#define HID_USAGE_MEDICAL_ZOOM_ADJUST (0x81) // LC +#define HID_USAGE_MEDICAL_SPECTRAL_DOPPLER_MODE_SELECT (0x82) // OSC +#define HID_USAGE_MEDICAL_SPECTRAL_DOPPLER_ADJUST (0x83) // LC +#define HID_USAGE_MEDICAL_COLOR_DOPPLER_MODE_SELECT (0x84) // OSC +#define HID_USAGE_MEDICAL_COLOR_DOPPLER_ADJUST (0x85) // LC +#define HID_USAGE_MEDICAL_MOTION_MODE_SELECT (0x86) // OSC +#define HID_USAGE_MEDICAL_MOTION_MODE_ADJUST (0x87) // LC +#define HID_USAGE_MEDICAL_2_D_MODE_SELECT (0x88) // OSC +#define HID_USAGE_MEDICAL_2_D_MODE_ADJUST (0x89) // LC +#define HID_USAGE_MEDICAL_SOFT_CONTROL_SELECT (0xA0) // OSC +#define HID_USAGE_MEDICAL_SOFT_CONTROL_ADJUST (0xA1) // LC + +/* Page 0x41: Braille Display */ +#define HID_USAGE_BRAILLE_UNDEFINED (0x00) +#define HID_USAGE_BRAILLE_BRAILLE_DISPLAY (0x01) // CA +#define HID_USAGE_BRAILLE_BRAILLE_ROW (0x02) // NAry +#define HID_USAGE_BRAILLE_8_DOT_BRAILLE_CELL (0x03) // DV +#define HID_USAGE_BRAILLE_6_DOT_BRAILLE_CELL (0x04) // DV +#define HID_USAGE_BRAILLE_NUMBER_OF_BRAILLE_CELLS (0x05) // DV +#define HID_USAGE_BRAILLE_SCREEN_READER_CONTROL (0x06) // NAry +#define HID_USAGE_BRAILLE_SCREEN_READER_IDENTIFIER (0x07) // DV +#define HID_USAGE_BRAILLE_ROUTER_SET_1 (0xFA) // NAry +#define HID_USAGE_BRAILLE_ROUTER_SET_2 (0xFB) // NAry +#define HID_USAGE_BRAILLE_ROUTER_SET_3 (0xFC) // Nary +#define HID_USAGE_BRAILLE_ROUTER_KEY (0x100) // Sel +#define HID_USAGE_BRAILLE_ROW_ROUTER_KEY (0x101) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_BUTTONS (0x200) // NAry +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_1 (0x201) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_2 (0x202) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_3 (0x203) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_4 (0x204) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_5 (0x205) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_6 (0x206) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_7 (0x207) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_DOT_8 (0x208) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_SPACE (0x209) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_LEFT_SPACE (0x20A) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_KEYBOARD_RIGHT_SPACE (0x20B) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_FACE_CONTROLS (0x20C) // NAry +#define HID_USAGE_BRAILLE_BRAILLE_LEFT_CONTROLS (0x20D) // NAry +#define HID_USAGE_BRAILLE_BRAILLE_RIGHT_CONTROLS (0x20E) // NAry +#define HID_USAGE_BRAILLE_BRAILLE_TOP_CONTROLS (0x20F) // NAry +#define HID_USAGE_BRAILLE_BRAILLE_JOYSTICK_CENTER (0x210) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_JOYSTICK_UP (0x211) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_JOYSTICK_DOWN (0x212) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_JOYSTICK_LEFT (0x213) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_JOYSTICK_RIGHT (0x214) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_D_PAD_CENTER (0x215) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_D_PAD_UP (0x216) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_D_PAD_DOWN (0x217) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_D_PAD_LEFT (0x218) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_D_PAD_RIGHT (0x219) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_PAN_LEFT (0x21A) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_PAN_RIGHT (0x21B) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_ROCKER_UP (0x21C) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_ROCKER_DOWN (0x21D) // Sel +#define HID_USAGE_BRAILLE_BRAILLE_ROCKER_PRESS (0x21E) // Sel + +/* Page 0x59: Lighting And Illumination */ +#define HID_USAGE_LIGHT_UNDEFINED (0x00) +#define HID_USAGE_LIGHT_LAMP_ARRAY (0x01) // CA +#define HID_USAGE_LIGHT_LAMP_ARRAY_ATTRIBUTES_REPORT (0x02) // CL +#define HID_USAGE_LIGHT_LAMP_COUNT (0x03) // SV, DV +#define HID_USAGE_LIGHT_BOUNDING_BOX_WIDTH_IN_MICROMETERS (0x04) // SV +#define HID_USAGE_LIGHT_BOUNDING_BOX_HEIGHT_IN_MICROMETERS (0x05) // SV +#define HID_USAGE_LIGHT_BOUNDING_BOX_DEPTH_IN_MICROMETERS (0x06) // SV +#define HID_USAGE_LIGHT_LAMP_ARRAY_KIND (0x07) // SV +#define HID_USAGE_LIGHT_MIN_UPDATE_INTERVAL_IN_MICROSECONDS (0x08) // SV +#define HID_USAGE_LIGHT_LAMP_ATTRIBUTES_REQUEST_REPORT (0x20) // CL +#define HID_USAGE_LIGHT_LAMP_ID (0x21) // SV, DV +#define HID_USAGE_LIGHT_LAMP_ATTRIBUTES_RESPONSE_REPORT (0x22) // CL +#define HID_USAGE_LIGHT_POSITION_X_IN_MICROMETERS (0x23) // DV +#define HID_USAGE_LIGHT_POSITION_Y_IN_MICROMETERS (0x24) // DV +#define HID_USAGE_LIGHT_POSITION_Z_IN_MICROMETERS (0x25) // DV +#define HID_USAGE_LIGHT_LAMP_PURPOSES (0x26) // DV +#define HID_USAGE_LIGHT_UPDATE_LATENCY_IN_MICROSECONDS (0x27) // DV +#define HID_USAGE_LIGHT_RED_LEVEL_COUNT (0x28) // DV +#define HID_USAGE_LIGHT_GREEN_LEVEL_COUNT (0x29) // DV +#define HID_USAGE_LIGHT_BLUE_LEVEL_COUNT (0x2A) // DV +#define HID_USAGE_LIGHT_INTENSITY_LEVEL_COUNT (0x2B) // DV +#define HID_USAGE_LIGHT_IS_PROGRAMMABLE (0x2C) // DV +#define HID_USAGE_LIGHT_INPUT_BINDING (0x2D) // DV +#define HID_USAGE_LIGHT_LAMP_MULTI_UPDATE_REPORT (0x50) // CL +#define HID_USAGE_LIGHT_RED_UPDATE_CHANNEL (0x51) // DV +#define HID_USAGE_LIGHT_GREEN_UPDATE_CHANNEL (0x52) // DV +#define HID_USAGE_LIGHT_BLUE_UPDATE_CHANNEL (0x53) // DV +#define HID_USAGE_LIGHT_INTENSITY_UPDATE_CHANNEL (0x54) // DV +#define HID_USAGE_LIGHT_LAMP_UPDATE_FLAGS (0x55) // DV +#define HID_USAGE_LIGHT_LAMP_RANGE_UPDATE_REPORT (0x60) // CL +#define HID_USAGE_LIGHT_LAMP_ID_START (0x61) // DV +#define HID_USAGE_LIGHT_LAMP_ID_END (0x62) // DV +#define HID_USAGE_LIGHT_LAMP_ARRAY_CONTROL_REPORT (0x70) // CL +#define HID_USAGE_LIGHT_AUTONOMOUS_MODE (0x71) // DV + +/* Page 0x80: USB Monitor */ +#define HID_USAGE_MONITOR_MONITOR_CONTROL (0x01) +#define HID_USAGE_MONITOR_EDID_INFORMATION (0x02) +#define HID_USAGE_MONITOR_VDIF_INFORMATION (0x03) +#define HID_USAGE_MONITOR_VESA_VERSION (0x04) + +/* Page 0x82: VESA Virtual Control */ +#define HID_USAGE_MONITOR_VESA_BRIGHTNESS (0x10) +#define HID_USAGE_MONITOR_VESA_CONTRAST (0x12) +#define HID_USAGE_MONITOR_VESA_RED_VIDEO_GAIN (0x16) +#define HID_USAGE_MONITOR_VESA_GREEN_VIDEO_GAIN (0x18) +#define HID_USAGE_MONITOR_VESA_BLUE_VIDEO_GAIN (0x1A) +#define HID_USAGE_MONITOR_VESA_FOCUS (0x1C) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_POSITION (0x20) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_SIZE (0x22) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_PINCUSHION (0x24) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_PINCUSHION_BALANCE (0x26) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_MISCONVERGENCE (0x28) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_LINEARITY (0x2A) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_LINEARITY_BALANCE (0x2C) +#define HID_USAGE_MONITOR_VESA_VERTICAL_POSITION (0x30) +#define HID_USAGE_MONITOR_VESA_VERTICAL_SIZE (0x32) +#define HID_USAGE_MONITOR_VESA_VERTICAL_PINCUSHION (0x34) +#define HID_USAGE_MONITOR_VESA_VERTICAL_PINCUSHION_BALANCE (0x36) +#define HID_USAGE_MONITOR_VESA_VERTICAL_MISCONVERGENCE (0x38) +#define HID_USAGE_MONITOR_VESA_VERTICAL_LINEARITY (0x3A) +#define HID_USAGE_MONITOR_VESA_VERTICAL_LINEARITY_BALANCE (0x3C) +#define HID_USAGE_MONITOR_VESA_PARALLELOGRAM_DISTORTION_KEY_BALANCE (0x40) +#define HID_USAGE_MONITOR_VESA_TRAPEZOIDAL_DISTORTION_KEY (0x42) +#define HID_USAGE_MONITOR_VESA_TILT_ROTATION (0x44) +#define HID_USAGE_MONITOR_VESA_TOP_CORNER_DISTORTION_CONTROL (0x46) +#define HID_USAGE_MONITOR_VESA_TOP_CORNER_DISTORTION_BALANCE (0x48) +#define HID_USAGE_MONITOR_VESA_BOTTOM_CORNER_DISTORTION_CONTROL (0x4A) +#define HID_USAGE_MONITOR_VESA_BOTTOM_CORNER_DISTORTION_BALANCE (0x4C) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_MOIR (0x56) +#define HID_USAGE_MONITOR_VESA_VERTICAL_MOIR (0x58) +#define HID_USAGE_MONITOR_VESA_RED_VIDEO_BLACK_LEVEL (0x6C) +#define HID_USAGE_MONITOR_VESA_GREEN_VIDEO_BLACK_LEVEL (0x6E) +#define HID_USAGE_MONITOR_VESA_BLUE_VIDEO_BLACK_LEVEL (0x70) +#define HID_USAGE_MONITOR_VESA_INPUT_LEVEL_SELECT (0x5E) +#define HID_USAGE_MONITOR_VESA_INPUT_SOURCE_SELECT (0x60) +#define HID_USAGE_MONITOR_VESA_ON_SCREEN_DISPLAY (0xCA) +#define HID_USAGE_MONITOR_VESA_STEREOMODE (0xD4) +#define HID_USAGE_MONITOR_VESA_AUTO_SIZE_CENTER (0xA2) +#define HID_USAGE_MONITOR_VESA_POLARITY_HORIZONTAL_SYNCHRONIZATION (0xA4) +#define HID_USAGE_MONITOR_VESA_POLARITY_VERTICAL_SYNCHRONIZATION (0xA6) +#define HID_USAGE_MONITOR_VESA_SYNCHRONIZATION_TYPE (0xA8) +#define HID_USAGE_MONITOR_VESA_SCREEN_ORIENTATION (0xAA) +#define HID_USAGE_MONITOR_VESA_HORIZONTAL_FREQUENCY (0xAC) +#define HID_USAGE_MONITOR_VESA_VERTICAL_FREQUENCY (0xAE) +#define HID_USAGE_MONITOR_VESA_DEGAUSS (0x01) +#define HID_USAGE_MONITOR_VESA_SETTINGS (0xB0) + +/* Page 0x8C: Bar Code Scanner */ +#define HID_USAGE_POS_BARCODE_UNDEFINED (0x00) +#define HID_USAGE_POS_BARCODE_BAR_CODE_BADGE_READER (0x01) // CA +#define HID_USAGE_POS_BARCODE_BAR_CODE_SCANNER (0x02) // CA +#define HID_USAGE_POS_BARCODE_DUMB_BAR_CODE_SCANNER (0x03) // CA +#define HID_USAGE_POS_BARCODE_CORDLESS_SCANNER_BASE (0x04) // CA +#define HID_USAGE_POS_BARCODE_BAR_CODE_SCANNER_CRADLE (0x05) // CA +#define HID_USAGE_POS_BARCODE_ATTRIBUTE_REPORT (0x10) // CL +#define HID_USAGE_POS_BARCODE_SETTINGS_REPORT (0x11) // CL +#define HID_USAGE_POS_BARCODE_SCANNED_DATA_REPORT (0x12) // CL +#define HID_USAGE_POS_BARCODE_RAW_SCANNED_DATA_REPORT (0x13) // CL +#define HID_USAGE_POS_BARCODE_TRIGGER_REPORT (0x14) // CL +#define HID_USAGE_POS_BARCODE_STATUS_REPORT (0x15) // CL +#define HID_USAGE_POS_BARCODE_UPC_EAN_CONTROL_REPORT (0x16) // CL +#define HID_USAGE_POS_BARCODE_EAN_2_3_LABEL_CONTROL_REPORT (0x17) // CL +#define HID_USAGE_POS_BARCODE_CODE_39_CONTROL_REPORT (0x18) // CL +#define HID_USAGE_POS_BARCODE_INTERLEAVED_2_OF_5_CONTROL_REPORT (0x19) // CL +#define HID_USAGE_POS_BARCODE_STANDARD_2_OF_5_CONTROL_REPORT (0x1A) // CL +#define HID_USAGE_POS_BARCODE_MSI_PLESSEY_CONTROL_REPORT (0x1B) // CL +#define HID_USAGE_POS_BARCODE_CODABAR_CONTROL_REPORT (0x1C) // CL +#define HID_USAGE_POS_BARCODE_CODE_128_CONTROL_REPORT (0x1D) // CL +#define HID_USAGE_POS_BARCODE_MISC_1D_CONTROL_REPORT (0x1E) // CL +#define HID_USAGE_POS_BARCODE_2D_CONTROL_REPORT (0x1F) // CL +#define HID_USAGE_POS_BARCODE_AIMING_POINTER_MODE (0x30) // SF +#define HID_USAGE_POS_BARCODE_BAR_CODE_PRESENT_SENSOR (0x31) // SF +#define HID_USAGE_POS_BARCODE_CLASS_1A_LASER (0x32) // SF +#define HID_USAGE_POS_BARCODE_CLASS_2_LASER (0x33) // SF +#define HID_USAGE_POS_BARCODE_HEATER_PRESENT (0x34) // SF +#define HID_USAGE_POS_BARCODE_CONTACT_SCANNER (0x35) // SF +#define HID_USAGE_POS_BARCODE_ELECTRONIC_ARTICLE_SURVEILLANCE_NOTIFICATION (0x36) // SF +#define HID_USAGE_POS_BARCODE_CONSTANT_ELECTRONIC_ARTICLE_SURVEILLANCE (0x37) // SF +#define HID_USAGE_POS_BARCODE_ERROR_INDICATION (0x38) // SF +#define HID_USAGE_POS_BARCODE_FIXED_BEEPER (0x39) // SF +#define HID_USAGE_POS_BARCODE_GOOD_DECODE_INDICATION (0x3A) // SF +#define HID_USAGE_POS_BARCODE_HANDS_FREE_SCANNING (0x3B) // SF +#define HID_USAGE_POS_BARCODE_INTRINSICALLY_SAFE (0x3C) // SF +#define HID_USAGE_POS_BARCODE_KLASSE_EINS_LASER (0x3D) // SF +#define HID_USAGE_POS_BARCODE_LONG_RANGE_SCANNER (0x3E) // SF +#define HID_USAGE_POS_BARCODE_MIRROR_SPEED_CONTROL (0x3F) // SF +#define HID_USAGE_POS_BARCODE_NOT_ON_FILE_INDICATION (0x40) // SF +#define HID_USAGE_POS_BARCODE_PROGRAMMABLE_BEEPER (0x41) // SF +#define HID_USAGE_POS_BARCODE_TRIGGERLESS (0x42) // SF +#define HID_USAGE_POS_BARCODE_WAND (0x43) // SF +#define HID_USAGE_POS_BARCODE_WATER_RESISTANT (0x44) // SF +#define HID_USAGE_POS_BARCODE_MULTI_RANGE_SCANNER (0x45) // SF +#define HID_USAGE_POS_BARCODE_PROXIMITY_SENSOR (0x46) // SF +#define HID_USAGE_POS_BARCODE_FRAGMENT_DECODING (0x4D) // DF +#define HID_USAGE_POS_BARCODE_SCANNER_READ_CONFIDENCE (0x4E) // DV +#define HID_USAGE_POS_BARCODE_DATA_PREFIX (0x4F) // NAry +#define HID_USAGE_POS_BARCODE_PREFIX_AIMI (0x50) // SEL +#define HID_USAGE_POS_BARCODE_PREFIX_NONE (0x51) // SEL +#define HID_USAGE_POS_BARCODE_PREFIX_PROPRIETARY (0x52) // SEL +#define HID_USAGE_POS_BARCODE_ACTIVE_TIME (0x55) // DV +#define HID_USAGE_POS_BARCODE_AIMING_LASER_PATTERN (0x56) // DF +#define HID_USAGE_POS_BARCODE_BAR_CODE_PRESENT (0x57) // OOC +#define HID_USAGE_POS_BARCODE_BEEPER_STATE (0x58) // OOC +#define HID_USAGE_POS_BARCODE_LASER_ON_TIME (0x59) // DV +#define HID_USAGE_POS_BARCODE_LASER_STATE (0x5A) // OOC +#define HID_USAGE_POS_BARCODE_LOCKOUT_TIME (0x5B) // DV +#define HID_USAGE_POS_BARCODE_MOTOR_STATE (0x5C) // OOC +#define HID_USAGE_POS_BARCODE_MOTOR_TIMEOUT (0x5D) // DV +#define HID_USAGE_POS_BARCODE_POWER_ON_RESET_SCANNER (0x5E) // DF +#define HID_USAGE_POS_BARCODE_PREVENT_READ_OF_BARCODES (0x5F) // DF +#define HID_USAGE_POS_BARCODE_INITIATE_BARCODE_READ (0x60) // DF +#define HID_USAGE_POS_BARCODE_TRIGGER_STATE (0x61) // OOC +#define HID_USAGE_POS_BARCODE_TRIGGER_MODE (0x62) // NAry +#define HID_USAGE_POS_BARCODE_TRIGGER_MODE_BLINKING_LASER_ON (0x63) // SEL +#define HID_USAGE_POS_BARCODE_TRIGGER_MODE_CONTINUOUS_LASER_ON (0x64) // SEL +#define HID_USAGE_POS_BARCODE_TRIGGER_MODE_LASER_ON_WHILE_PULLED (0x65) // SEL +#define HID_USAGE_POS_BARCODE_TRIGGER_MODE_LASER_STAYS_ON_AFTER_TRIGGER_RELEASE (0x66) // SEL +#define HID_USAGE_POS_BARCODE_COMMIT_PARAMETERS_TO_NVM (0x6D) // DF +#define HID_USAGE_POS_BARCODE_PARAMETER_SCANNING (0x6E) // DF +#define HID_USAGE_POS_BARCODE_PARAMETERS_CHANGED (0x6F) // OOC +#define HID_USAGE_POS_BARCODE_SET_PARAMETER_DEFAULT_VALUES (0x70) // DF +#define HID_USAGE_POS_BARCODE_SCANNER_IN_CRADLE (0x75) // OOC +#define HID_USAGE_POS_BARCODE_SCANNER_IN_RANGE (0x76) // OOC +#define HID_USAGE_POS_BARCODE_AIM_DURATION (0x7A) // DV +#define HID_USAGE_POS_BARCODE_GOOD_READ_LAMP_DURATION (0x7B) // DV +#define HID_USAGE_POS_BARCODE_GOOD_READ_LAMP_INTENSITY (0x7C) // DV +#define HID_USAGE_POS_BARCODE_GOOD_READ_LED (0x7D) // DF +#define HID_USAGE_POS_BARCODE_GOOD_READ_TONE_FREQUENCY (0x7E) // DV +#define HID_USAGE_POS_BARCODE_GOOD_READ_TONE_LENGTH (0x7F) // DV +#define HID_USAGE_POS_BARCODE_GOOD_READ_TONE_VOLUME (0x80) // DV +#define HID_USAGE_POS_BARCODE_NO_READ_MESSAGE (0x82) // DF +#define HID_USAGE_POS_BARCODE_NOT_ON_FILE_VOLUME (0x83) // DV +#define HID_USAGE_POS_BARCODE_POWERUP_BEEP (0x84) // DF +#define HID_USAGE_POS_BARCODE_SOUND_ERROR_BEEP (0x85) // DF +#define HID_USAGE_POS_BARCODE_SOUND_GOOD_READ_BEEP (0x86) // DF +#define HID_USAGE_POS_BARCODE_SOUND_NOT_ON_FILE_BEEP (0x87) // DF +#define HID_USAGE_POS_BARCODE_GOOD_READ_WHEN_TO_WRITE (0x88) // NAry +#define HID_USAGE_POS_BARCODE_GRWTI_AFTER_DECODE (0x89) // SEL +#define HID_USAGE_POS_BARCODE_GRWTI_BEEP_LAMP_AFTER_TRANSMIT (0x8A) // SEL +#define HID_USAGE_POS_BARCODE_GRWTI_NO_BEEP_LAMP_USE_AT_ALL (0x8B) // SEL +#define HID_USAGE_POS_BARCODE_BOOKLAND_EAN (0x91) // DF +#define HID_USAGE_POS_BARCODE_CONVERT_EAN_8_TO_13_TYPE (0x92) // DF +#define HID_USAGE_POS_BARCODE_CONVERT_UPC_A_TO_EAN_13 (0x93) // DF +#define HID_USAGE_POS_BARCODE_CONVERT_UPC_E_TO_A (0x94) // DF +#define HID_USAGE_POS_BARCODE_EAN_13 (0x95) // DF +#define HID_USAGE_POS_BARCODE_EAN_8 (0x96) // DF +#define HID_USAGE_POS_BARCODE_EAN_99_128_MANDATORY (0x97) // DF +#define HID_USAGE_POS_BARCODE_EAN_99_P5_128_OPTIONAL (0x98) // DF +#define HID_USAGE_POS_BARCODE_UPC_EAN (0x9A) // DF +#define HID_USAGE_POS_BARCODE_UPC_EAN_COUPON_CODE (0x9B) // DF +#define HID_USAGE_POS_BARCODE_UPC_EAN_PERIODICALS (0x9C) // DV +#define HID_USAGE_POS_BARCODE_UPC_A (0x9D) // DF +#define HID_USAGE_POS_BARCODE_UPC_A_WITH_128_MANDATORY (0x9E) // DF +#define HID_USAGE_POS_BARCODE_UPC_A_WITH_128_OPTIONAL (0x9F) // DF +#define HID_USAGE_POS_BARCODE_UPC_A_WITH_P5_OPTIONAL (0xA0) // DF +#define HID_USAGE_POS_BARCODE_UPC_E (0xA1) // DF +#define HID_USAGE_POS_BARCODE_UPC_E1 (0xA2) // DF +#define HID_USAGE_POS_BARCODE_PERIODICAL (0xA9) // NAry +#define HID_USAGE_POS_BARCODE_PERIODICAL_AUTO_DISCRIMINATE_PLUS_2 (0xAA) // SEL +#define HID_USAGE_POS_BARCODE_PERIODICAL_ONLY_DECODE_WITH_PLUS_2 (0xAB) // SEL +#define HID_USAGE_POS_BARCODE_PERIODICAL_IGNORE_PLUS_2 (0xAC) // SEL +#define HID_USAGE_POS_BARCODE_PERIODICAL_AUTO_DISCRIMINATE_PLUS_5 (0xAD) // SEL +#define HID_USAGE_POS_BARCODE_PERIODICAL_ONLY_DECODE_WITH_PLUS_5 (0xAE) // SEL +#define HID_USAGE_POS_BARCODE_PERIODICAL_IGNORE_PLUS_5 (0xAF) // SEL +#define HID_USAGE_POS_BARCODE_CHECK (0xB0) // NAry +#define HID_USAGE_POS_BARCODE_CHECK_DISABLE_PRICE (0xB1) // SEL +#define HID_USAGE_POS_BARCODE_CHECK_ENABLE_4_DIGIT_PRICE (0xB2) // SEL +#define HID_USAGE_POS_BARCODE_CHECK_ENABLE_5_DIGIT_PRICE (0xB3) // SEL +#define HID_USAGE_POS_BARCODE_CHECK_ENABLE_EUROPEAN_4_DIGIT_PRICE (0xB4) // SEL +#define HID_USAGE_POS_BARCODE_CHECK_ENABLE_EUROPEAN_5_DIGIT_PRICE (0xB5) // SEL +#define HID_USAGE_POS_BARCODE_EAN_TWO_LABEL (0xB7) // DF +#define HID_USAGE_POS_BARCODE_EAN_THREE_LABEL (0xB8) // DF +#define HID_USAGE_POS_BARCODE_EAN_8_FLAG_DIGIT_1 (0xB9) // DV +#define HID_USAGE_POS_BARCODE_EAN_8_FLAG_DIGIT_2 (0xBA) // DV +#define HID_USAGE_POS_BARCODE_EAN_8_FLAG_DIGIT_3 (0xBB) // DV +#define HID_USAGE_POS_BARCODE_EAN_13_FLAG_DIGIT_1 (0xBC) // DV +#define HID_USAGE_POS_BARCODE_EAN_13_FLAG_DIGIT_2 (0xBD) // DV +#define HID_USAGE_POS_BARCODE_TRANSMIT_CHECK_DIGIT (0xF0) // NAry +#define HID_USAGE_POS_BARCODE_DISABLE_CHECK_DIGIT_TRANSMIT (0xF1) // SEL +#define HID_USAGE_POS_BARCODE_ENABLE_CHECK_DIGIT_TRANSMIT (0xF2) // SEL +#define HID_USAGE_POS_BARCODE_SYMBOLOGY_IDENTIFIER_1 (0xFB) // DV +#define HID_USAGE_POS_BARCODE_SYMBOLOGY_IDENTIFIER_2 (0xFC) // DV +#define HID_USAGE_POS_BARCODE_SYMBOLOGY_IDENTIFIER_3 (0xFD) // DV +#define HID_USAGE_POS_BARCODE_DECODED_DATA (0xFE) // DV +#define HID_USAGE_POS_BARCODE_DECODE_DATA_CONTINUED (0xFF) // DF +#define HID_USAGE_POS_BARCODE_BAR_SPACE_DATA (0x100) // DV +#define HID_USAGE_POS_BARCODE_SCANNER_DATA_ACCURACY (0x101) // DV +#define HID_USAGE_POS_BARCODE_RAW_DATA_POLARITY (0x102) // NAry +#define HID_USAGE_POS_BARCODE_POLARITY_INVERTED_BAR_CODE (0x103) // SEL +#define HID_USAGE_POS_BARCODE_POLARITY_NORMAL_BAR_CODE (0x104) // SEL +#define HID_USAGE_POS_BARCODE_MINIMUM_LENGTH_TO_DECODE (0x106) // DV +#define HID_USAGE_POS_BARCODE_MAXIMUM_LENGTH_TO_DECODE (0x107) // DV +#define HID_USAGE_POS_BARCODE_FIRST_DISCRETE_LENGTH_TO_DECODE (0x108) // DV +#define HID_USAGE_POS_BARCODE_SECOND_DISCRETE_LENGTH_TO_DECODE (0x109) // DV +#define HID_USAGE_POS_BARCODE_DATA_LENGTH_METHOD (0x10A) // NAry +#define HID_USAGE_POS_BARCODE_DL_METHOD_READ_ANY (0x10B) // SEL +#define HID_USAGE_POS_BARCODE_DL_METHOD_CHECK_IN_RANGE (0x10C) // SEL +#define HID_USAGE_POS_BARCODE_DL_METHOD_CHECK_FOR_DISCRETE (0x10D) // SEL +#define HID_USAGE_POS_BARCODE_AZTEC_CODE (0x110) // DF +#define HID_USAGE_POS_BARCODE_BC412 (0x111) // DF +#define HID_USAGE_POS_BARCODE_CHANNEL_CODE (0x112) // DF +#define HID_USAGE_POS_BARCODE_CODE_16 (0x113) // DF +#define HID_USAGE_POS_BARCODE_CODE_32 (0x114) // DF +#define HID_USAGE_POS_BARCODE_CODE_49 (0x115) // DF +#define HID_USAGE_POS_BARCODE_CODE_ONE (0x116) // DF +#define HID_USAGE_POS_BARCODE_COLORCODE (0x117) // DF +#define HID_USAGE_POS_BARCODE_DATA_MATRIX (0x118) // DF +#define HID_USAGE_POS_BARCODE_MAXICODE (0x119) // DF +#define HID_USAGE_POS_BARCODE_MICROPDF (0x11A) // DF +#define HID_USAGE_POS_BARCODE_PDF_417 (0x11B) // DF +#define HID_USAGE_POS_BARCODE_POSICODE (0x11C) // DF +#define HID_USAGE_POS_BARCODE_QR_CODE (0x11D) // DF +#define HID_USAGE_POS_BARCODE_SUPERCODE (0x11E) // DF +#define HID_USAGE_POS_BARCODE_ULTRACODE (0x11F) // DF +#define HID_USAGE_POS_BARCODE_USD_5_SLUG_CODE (0x120) // DF +#define HID_USAGE_POS_BARCODE_VERICODE (0x121) // DF + +/* Page 0x8D: Scale */ +#define HID_USAGE_POS_SCALE_UNDEFINED (0x00) +#define HID_USAGE_POS_SCALE_WEIGHING_DEVICE (0x01) // CA +#define HID_USAGE_POS_SCALE_SCALE_DEVICE (0x20) // CL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_I_METRIC (0x21) // CL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_I_METRIC_2 (0x22) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_II_METRIC (0x23) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_III_METRIC (0x24) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_IIIL_METRIC (0x25) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_IV_METRIC (0x26) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_III_ENGLISH (0x27) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_IIIL_ENGLISH (0x28) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_IV_ENGLISH (0x29) // SEL +#define HID_USAGE_POS_SCALE_SCALE_CLASS_GENERIC (0x2A) // SEL +#define HID_USAGE_POS_SCALE_SCALE_ATTRIBUTE_REPORT (0x30) // CL +#define HID_USAGE_POS_SCALE_SCALE_CONTROL_REPORT (0x31) // CL +#define HID_USAGE_POS_SCALE_SCALE_DATA_REPORT (0x32) // CL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_REPORT (0x33) // CL +#define HID_USAGE_POS_SCALE_SCALE_WEIGHT_LIMIT_REPORT (0x34) // CL +#define HID_USAGE_POS_SCALE_SCALE_STATISTICS_REPORT (0x35) // CL +#define HID_USAGE_POS_SCALE_DATA_WEIGHT (0x40) // DV +#define HID_USAGE_POS_SCALE_DATA_SCALING (0x41) // CV +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT (0x50) // CL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_MILLIGRAM (0x51) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_GRAM (0x52) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_KILOGRAM (0x53) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_CARATS (0x54) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_TAELS (0x55) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_GRAINS (0x56) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_PENNYWEIGHTS (0x57) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_METRIC_TON (0x58) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_AVOIR_TON (0x59) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_TROY_OUNCE (0x5A) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_OUNCE (0x5B) // SEL +#define HID_USAGE_POS_SCALE_WEIGHT_UNIT_POUND (0x5C) // SEL +#define HID_USAGE_POS_SCALE_CALIBRATION_COUNT (0x60) // DV +#define HID_USAGE_POS_SCALE_RE_ZERO_COUNT (0x61) // DV +#define HID_USAGE_POS_SCALE_SCALE_STATUS (0x70) // CL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_FAULT (0x71) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_STABLE_AT_CENTER_OF_ZERO (0x72) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_IN_MOTION (0x73) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_WEIGHT_STABLE (0x74) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_UNDER_ZERO (0x75) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_OVER_WEIGHT_LIMIT (0x76) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_REQUIRES_CALIBRATION (0x77) // SEL +#define HID_USAGE_POS_SCALE_SCALE_STATUS_REQUIRES_RE_ZEROING (0x78) // SEL +#define HID_USAGE_POS_SCALE_ZERO_SCALE (0x80) // OOC +#define HID_USAGE_POS_SCALE_ENFORCED_ZERO_RETURN (0x81) // OOC + +/* Page 0x8E: Magnetic Stripe Reading (MSR) Devices */ +#define HID_USAGE_POS_MSR_UNDEFINED (0x00) +#define HID_USAGE_POS_MSR_MSR_DEVICE_READ_ONLY (0x01) // CA +#define HID_USAGE_POS_MSR_TRACK_1_LENGTH (0x11) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_2_LENGTH (0x12) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_3_LENGTH (0x13) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_JIS_LENGTH (0x14) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_DATA (0x20) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_1_DATA (0x21) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_2_DATA (0x22) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_3_DATA (0x23) // SF, DF, SEL +#define HID_USAGE_POS_MSR_TRACK_JIS_DATA (0x24) // SF, DF, SEL + +/* Page 0x90: Camera Control */ +#define HID_USAGE_CAMERA_UNDEFINED (0x00) +#define HID_USAGE_CAMERA_CAMERA_AUTO_FOCUS (0x20) // OSC +#define HID_USAGE_CAMERA_CAMERA_SHUTTER (0x21) // OSC + +/* Page 0xF1D0: FIDO Alliance */ +#define HID_USAGE_FIDO_UNDEFINED (0x00) +#define HID_USAGE_FIDO_U2F_AUTHENTICATOR_DEVICE (0x01) // CA +#define HID_USAGE_FIDO_INPUT_REPORT_DATA (0x20) // DV +#define HID_USAGE_FIDO_OUTPUT_REPORT_DATA (0x21) // DV \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/hid_usage_pages.h b/zmk/app/include/dt-bindings/zmk/hid_usage_pages.h new file mode 100644 index 00000000..f38f4fd3 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/hid_usage_pages.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + * + * Based on HID Usage Tables 1.21, + * Copyright © 1996-2020, USB Implementers Forum, + * https://www.usb.org/sites/default/files/hut1_21.pdf + */ + +#pragma once + +#define HID_USAGE(page, id) ((page << 16) | id) +#define HID_USAGE_ID(usage) (usage & 0xFFFF) +#define HID_USAGE_PAGE(usage) (usage >> 16) + +/* WARNING: DEPRECATED from dt-bindings/zmk/keys.h */ +#define USAGE_KEYPAD (0x07) // WARNING: DEPRECATED (DO NOT USE) +#define USAGE_CONSUMER (0x0C) // WARNING: DEPRECATED (DO NOT USE) + +#define HID_USAGE_GD (0x01) // Generic Desktop +#define HID_USAGE_SIM (0x02) // Simulation Controls +#define HID_USAGE_VR (0x03) // VR Controls +#define HID_USAGE_SPORT (0x04) // Sport Controls +#define HID_USAGE_GAME (0x05) // Game Controls +#define HID_USAGE_GDV (0x06) // Generic Device Controls +#define HID_USAGE_KEY (0x07) // Keyboard/Keypad +#define HID_USAGE_LED (0x08) // LED +#define HID_USAGE_TELEPHONY (0x0B) // Telephony Device +#define HID_USAGE_CONSUMER (0x0C) // Consumer +#define HID_USAGE_DIGITIZERS (0x0D) // Digitizers +#define HID_USAGE_HAPTICS (0x0E) // Haptics +#define HID_USAGE_PID (0x0F) // PID +#define HID_USAGE_EHT (0x12) // Eye and Head Trackers +#define HID_USAGE_AUXDISP (0x14) // Auxiliary Display +#define HID_USAGE_SENSORS (0x20) // Sensors +#define HID_USAGE_MEDICAL (0x40) // Medical Instrument +#define HID_USAGE_BRAILLE (0x41) // Braille Display +#define HID_USAGE_LIGHT (0x59) // Lighting And Illumination +#define HID_USAGE_MONITOR (0x80) // USB Monitor +#define HID_USAGE_MONITOR_VALUES (0x81) // Monitor Enumerated Values +#define HID_USAGE_MONITOR_VESA (0x82) // VESA Virtual Control +#define HID_USAGE_POWER (0x84) // Power +#define HID_USAGE_POS_BARCODE (0x8C) // Bar Code Scanner +#define HID_USAGE_POS_SCALE (0x8D) // Scale +#define HID_USAGE_POS_MSR (0x8E) // Magnetic Stripe Reading (MSR) Devices +#define HID_USAGE_POS_RESV (0x8F) // Reserved Point of Sale +#define HID_USAGE_CAMERA (0x90) // Camera Control +#define HID_USAGE_ARCADE (0x91) // Arcade +#define HID_USAGE_GAMING (0x92) // Gaming Device +#define HID_USAGE_FIDO (0xF1D0) // FIDO Alliance \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/keys.h b/zmk/app/include/dt-bindings/zmk/keys.h new file mode 100644 index 00000000..8d0873c4 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/keys.h @@ -0,0 +1,1420 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#pragma once + +#include +#include +#include + +/* System Power Down */ +#define SYSTEM_POWER (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_POWER_DOWN)) +#define SYS_PWR (SYSTEM_POWER) + +/* System Sleep */ +#define SYSTEM_SLEEP (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_SLEEP)) +#define SYS_SLEEP (SYSTEM_SLEEP) + +/* System Wake Up */ +#define SYSTEM_WAKE_UP (HID_USAGE(HID_USAGE_GD, HID_USAGE_GD_SYSTEM_WAKE_UP)) +#define SYS_WAKE (SYSTEM_WAKE_UP) + +/* Keyboard a and A */ +#define A (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_A)) + +/* Keyboard b and B */ +#define B (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_B)) + +/* Keyboard c and C */ +#define C (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_C)) + +/* Keyboard d and D */ +#define D (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_D)) + +/* Keyboard e and E */ +#define E (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_E)) + +/* Keyboard f and F */ +#define F (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F)) + +/* Keyboard g and G */ +#define G (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_G)) + +/* Keyboard h and H */ +#define H (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_H)) + +/* Keyboard i and I */ +#define I (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_I)) + +/* Keyboard j and J */ +#define J (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_J)) + +/* Keyboard k and K */ +#define K (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_K)) + +/* Keyboard l and L */ +#define L (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_L)) + +/* Keyboard m and M */ +#define M (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_M)) + +/* Keyboard n and N */ +#define N (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_N)) + +/* Keyboard o and O */ +#define O (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_O)) + +/* Keyboard p and P */ +#define P (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_P)) + +/* Keyboard q and Q */ +#define Q (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Q)) + +/* Keyboard r and R */ +#define R (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_R)) + +/* Keyboard s and S */ +#define S (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_S)) + +/* Keyboard t and T */ +#define T (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_T)) + +/* Keyboard u and U */ +#define U (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_U)) + +/* Keyboard v and V */ +#define V (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_V)) + +/* Keyboard w and W */ +#define W (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_W)) + +/* Keyboard x and X */ +#define X (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_X)) + +/* Keyboard y and Y */ +#define Y (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Y)) + +/* Keyboard z and Z */ +#define Z (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_Z)) + +/* Keyboard 1 and ! (Exclamation) */ +#define NUMBER_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION)) +#define N1 (NUMBER_1) +#define NUM_1 (NUMBER_1) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ! (Exclamation) */ +#define EXCLAMATION (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION))) +#define EXCL (EXCLAMATION) +#define BANG (EXCLAMATION) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard 2 and @ (At sign) */ +#define NUMBER_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT)) +#define N2 (NUMBER_2) +#define NUM_2 (NUMBER_2) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard @ (At sign) */ +#define AT_SIGN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_2_AND_AT))) +#define AT (AT_SIGN) +#define ATSN (AT_SIGN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard 3 and # (Hash/Number) */ +#define NUMBER_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH)) +#define N3 (NUMBER_3) +#define NUM_3 (NUMBER_3) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard # (Hash/Number) */ +#define HASH (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_3_AND_HASH))) +#define POUND (HASH) + +/* Keyboard 4 and $ (Dollar) */ +#define NUMBER_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR)) +#define N4 (NUMBER_4) +#define NUM_4 (NUMBER_4) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard $ (Dollar) */ +#define DOLLAR (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_4_AND_DOLLAR))) +#define DLLR (DOLLAR) + +/* Keyboard 5 and % (Percent) */ +#define NUMBER_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT)) +#define N5 (NUMBER_5) +#define NUM_5 (NUMBER_5) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard % (Percent) */ +#define PERCENT (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_5_AND_PERCENT))) +#define PRCNT (PERCENT) +#define PRCT (PERCENT) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard 6 and ^ (Caret) */ +#define NUMBER_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET)) +#define N6 (NUMBER_6) +#define NUM_6 (NUMBER_6) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ^ (Caret) */ +#define CARET (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_6_AND_CARET))) +#define CRRT (CARET) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard 7 and & (Ampersand) */ +#define NUMBER_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND)) +#define N7 (NUMBER_7) +#define NUM_7 (NUMBER_7) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard & (Ampersand) */ +#define AMPERSAND (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_7_AND_AMPERSAND))) +#define AMPS (AMPERSAND) + +/* Keyboard 8 and * (Asterisk) */ +#define NUMBER_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK)) +#define N8 (NUMBER_8) +#define NUM_8 (NUMBER_8) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard * (Asterisk) */ +#define ASTERISK (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_8_AND_ASTERISK))) +#define ASTRK (ASTERISK) +#define STAR (ASTERISK) + +/* Keyboard 9 and ( (Left Parenthesis) */ +#define NUMBER_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS)) +#define N9 (NUMBER_9) +#define NUM_9 (NUMBER_9) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ( (Left Parenthesis) */ +#define LEFT_PARENTHESIS \ + (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_9_AND_LEFT_PARENTHESIS))) +#define LPAR (LEFT_PARENTHESIS) +#define LPRN (LEFT_PARENTHESIS) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard 0 and ) (Right Parenthesis) */ +#define NUMBER_0 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS)) +#define N0 (NUMBER_0) +#define NUM_0 (NUMBER_0) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ) (Right Parenthesis) */ +#define RIGHT_PARENTHESIS \ + (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS))) +#define RPAR (RIGHT_PARENTHESIS) +#define RPRN (RIGHT_PARENTHESIS) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Return (Enter) */ +#define RETURN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN_ENTER)) +#define ENTER (RETURN) +#define RET (RETURN) + +/* Keyboard Escape */ +#define ESCAPE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ESCAPE)) +#define ESC (ESCAPE) + +/* Keyboard Backspace */ +#define BACKSPACE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_BACKSPACE)) +#define BSPC (BACKSPACE) +#define BKSP (BACKSPACE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Tab */ +#define TAB (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_TAB)) + +/* Keyboard Space */ +#define SPACE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SPACEBAR)) +#define SPC (SPACE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard - and _ (Minus and Underscore) */ +#define MINUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE)) + +/* Keyboard _ (Underscore) */ +#define UNDERSCORE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MINUS_AND_UNDERSCORE))) +#define UNDER (UNDERSCORE) + +/* Keyboard = and + (Equal and Plus) */ +#define EQUAL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS)) +#define EQL (EQUAL) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard + (Plus) */ +#define PLUS (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EQUAL_AND_PLUS))) + +/* Keyboard [ and { (Left Bracket and Left Brace) */ +#define LEFT_BRACKET (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE)) +#define LBKT (LEFT_BRACKET) + +/* Keyboard { (Left Brace) */ +#define LEFT_BRACE \ + (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_BRACKET_AND_LEFT_BRACE))) +#define LBRC (LEFT_BRACE) +#define LCUR (LEFT_BRACE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ] and } (Right Bracket and Right Brace) */ +#define RIGHT_BRACKET \ + (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE)) +#define RBKT (RIGHT_BRACKET) + +/* Keyboard } (Right Brace) */ +#define RIGHT_BRACE \ + (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_BRACKET_AND_RIGHT_BRACE))) +#define RBRC (RIGHT_BRACE) +#define RCUR (RIGHT_BRACE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard \ and | (Backslash and Pipe) */ +#define BACKSLASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE)) +#define BSLH (BACKSLASH) + +/* Keyboard | (Pipe) */ +#define PIPE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_BACKSLASH_AND_PIPE))) + +/* Keyboard Non-US # and ~ (Non-US Hash/Number and Tilde) */ +#define NON_US_HASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE)) + +/* Keyboard ~ (Tilde) */ +#define TILDE2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_HASH_AND_TILDE))) + +/* Keyboard ; and : (Semicolon and Colon) */ +#define SEMICOLON (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON)) +#define SEMI (SEMICOLON) +#define SCLN (SEMICOLON) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard : (Colon) */ +#define COLON (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEMICOLON_AND_COLON))) +#define COLN (COLON) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ' and " (Apostrophe and Quote) */ +#define SINGLE_QUOTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE)) +#define SQT (SINGLE_QUOTE) +#define APOSTROPHE (SINGLE_QUOTE) +#define APOS (SINGLE_QUOTE) +#define QUOT (SINGLE_QUOTE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard " (Quote) */ +#define DOUBLE_QUOTES (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APOSTROPHE_AND_QUOTE))) +#define DQT (DOUBLE_QUOTES) + +/* Keyboard ` and ~ (Grave Accent and Tilde) */ +#define GRAVE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE)) +#define GRAV (GRAVE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard ~ (Tilde) */ +#define TILDE (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_GRAVE_ACCENT_AND_TILDE))) +#define TILD (TILDE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard , and < (Comma and Less Than) */ +#define COMMA (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN)) +#define CMMA (COMMA) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard < (Less Than) */ +#define LESS_THAN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COMMA_AND_LESS_THAN))) +#define LT (LESS_THAN) +#define LABT (LESS_THAN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard . and > (Period and Greater Than) */ +#define PERIOD (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN)) +#define DOT (PERIOD) + +/* Keyboard > (Greater Than) */ +#define GREATER_THAN (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PERIOD_AND_GREATER_THAN))) +#define GT (GREATER_THAN) +#define RABT (GREATER_THAN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard / and ? (Forward Slash and Question) */ +#define SLASH (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK)) +#define FSLH (SLASH) + +/* Keyboard ? (Question) */ +#define QUESTION (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SLASH_AND_QUESTION_MARK))) +#define QMARK (QUESTION) + +/* Keyboard Caps Lock */ +#define CAPSLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CAPS_LOCK)) +#define CAPS (CAPSLOCK) +#define CLCK (CAPSLOCK) + +/* Keyboard F1 */ +#define F1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F1)) + +/* Keyboard F2 */ +#define F2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F2)) + +/* Keyboard F3 */ +#define F3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F3)) + +/* Keyboard F4 */ +#define F4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F4)) + +/* Keyboard F5 */ +#define F5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F5)) + +/* Keyboard F6 */ +#define F6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F6)) + +/* Keyboard F7 */ +#define F7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F7)) + +/* Keyboard F8 */ +#define F8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F8)) + +/* Keyboard F9 */ +#define F9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F9)) + +/* Keyboard F10 */ +#define F10 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F10)) + +/* Keyboard F11 */ +#define F11 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F11)) + +/* Keyboard F12 */ +#define F12 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F12)) + +/* Keyboard Print Screen */ +#define PRINTSCREEN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRINTSCREEN)) +#define PSCRN (PRINTSCREEN) +#define PRSC (PRINTSCREEN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Scroll Lock */ +#define SCROLLLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SCROLL_LOCK)) +#define SLCK (SCROLLLOCK) +#define SCLK (SCROLLLOCK) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Pause/Break */ +#define PAUSE_BREAK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAUSE)) +#define PAUS (PAUSE_BREAK) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Insert */ +#define INSERT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INSERT)) +#define INS (INSERT) + +/* Keyboard Home */ +#define HOME (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HOME)) + +/* Keyboard Page Up */ +#define PAGE_UP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEUP)) +#define PG_UP (PAGE_UP) +#define PGUP (PAGE_UP) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Delete */ +#define DELETE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DELETE_FORWARD)) +#define DEL (DELETE) + +/* Keyboard End */ +#define END (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_END)) + +/* Keyboard Page Down */ +#define PAGE_DOWN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PAGEDOWN)) +#define PG_DN (PAGE_DOWN) +#define PGDN (PAGE_DOWN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Right Arrow */ +#define RIGHT_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTARROW)) +#define RIGHT (RIGHT_ARROW) +#define RARW (RIGHT_ARROW) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Left Arrow */ +#define LEFT_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTARROW)) +#define LEFT (LEFT_ARROW) +#define LARW (LEFT_ARROW) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Down Arrow */ +#define DOWN_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_DOWNARROW)) +#define DOWN (DOWN_ARROW) +#define DARW (DOWN_ARROW) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Up Arrow */ +#define UP_ARROW (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UPARROW)) +#define UP (UP_ARROW) +#define UARW (UP_ARROW) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad Numlock and Clear */ +#define KP_NUMLOCK (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR)) +#define KP_NUM (KP_NUMLOCK) +#define KP_NLCK (KP_NUMLOCK) + +/* Keypad Clear */ +#define CLEAR2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_NUM_LOCK_AND_CLEAR))) + +/* Keypad / (Slash/Divide) */ +#define KP_DIVIDE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SLASH)) +#define KP_SLASH (KP_DIVIDE) +#define KDIV (KP_DIVIDE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad * (Multiply) */ +#define KP_MULTIPLY (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ASTERISK)) +#define KP_ASTERISK (KP_MULTIPLY) +#define KMLT (KP_MULTIPLY) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad - (Minus) */ +#define KP_MINUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_MINUS)) +#define KP_SUBTRACT (KP_MINUS) +#define KMIN (KP_MINUS) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad + (Plus) */ +#define KP_PLUS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PLUS)) +#define KPLS (KP_PLUS) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad Enter */ +#define KP_ENTER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_ENTER)) + +/* Keypad 1 */ +#define KP_NUMBER_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_1_AND_END)) +#define KP_N1 (KP_NUMBER_1) + +/* Keypad 2 */ +#define KP_NUMBER_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_2_AND_DOWN_ARROW)) +#define KP_N2 (KP_NUMBER_2) + +/* Keypad 3 */ +#define KP_NUMBER_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_3_AND_PAGEDN)) +#define KP_N3 (KP_NUMBER_3) + +/* Keypad 4 */ +#define KP_NUMBER_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_4_AND_LEFT_ARROW)) +#define KP_N4 (KP_NUMBER_4) + +/* Keypad 5 */ +#define KP_NUMBER_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_5)) +#define KP_N5 (KP_NUMBER_5) + +/* Keypad 6 */ +#define KP_NUMBER_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_6_AND_RIGHT_ARROW)) +#define KP_N6 (KP_NUMBER_6) + +/* Keypad 7 */ +#define KP_NUMBER_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_7_AND_HOME)) +#define KP_N7 (KP_NUMBER_7) + +/* Keypad 8 */ +#define KP_NUMBER_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_8_AND_UP_ARROW)) +#define KP_N8 (KP_NUMBER_8) + +/* Keypad 9 */ +#define KP_NUMBER_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_9_AND_PAGEUP)) +#define KP_N9 (KP_NUMBER_9) + +/* Keypad 0 */ +#define KP_NUMBER_0 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_0_AND_INSERT)) +#define KP_N0 (KP_NUMBER_0) + +/* Keypad . (Dot) */ +#define KP_DOT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_PERIOD_AND_DELETE)) + +/* Keyboard Non-US \ and | (Non-us Backslash and Pipe) */ +#define NON_US_BACKSLASH \ + (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE)) +#define NON_US_BSLH (NON_US_BACKSLASH) + +/* Keyboard Pipe */ +#define PIPE2 (LS(HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_NON_US_BACKSLASH_AND_PIPE))) + +/* Keyboard Application (Context Menu) */ +#define K_APPLICATION (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_APPLICATION)) +#define K_APP (K_APPLICATION) +#define K_CONTEXT_MENU (K_APPLICATION) +#define K_CMENU (K_APPLICATION) +#define GUI (K_APPLICATION) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Power */ +#define K_POWER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_POWER)) +#define K_PWR (K_POWER) + +/* Keypad = (Equal) */ +#define KP_EQUAL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL)) + +/* Keyboard F13 */ +#define F13 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F13)) + +/* Keyboard F14 */ +#define F14 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F14)) + +/* Keyboard F15 */ +#define F15 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F15)) + +/* Keyboard F16 */ +#define F16 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F16)) + +/* Keyboard F17 */ +#define F17 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F17)) + +/* Keyboard F18 */ +#define F18 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F18)) + +/* Keyboard F19 */ +#define F19 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F19)) + +/* Keyboard F20 */ +#define F20 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F20)) + +/* Keyboard F21 */ +#define F21 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F21)) + +/* Keyboard F22 */ +#define F22 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F22)) + +/* Keyboard F23 */ +#define F23 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F23)) + +/* Keyboard F24 */ +#define F24 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_F24)) + +/* Keyboard Execute */ +#define K_EXECUTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXECUTE)) +#define K_EXEC (K_EXECUTE) + +/* Keyboard Help */ +#define K_HELP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_HELP)) + +/* Keyboard Menu */ +#define K_MENU (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MENU)) + +/* Keyboard Select */ +#define K_SELECT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SELECT)) + +/* Keyboard Stop */ +#define K_STOP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_STOP)) + +/* Keyboard Again */ +#define K_AGAIN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_AGAIN)) +#define K_REDO (K_AGAIN) + +/* Keyboard Undo */ +#define K_UNDO (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_UNDO)) +#define UNDO (K_UNDO) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Cut */ +#define K_CUT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CUT)) +#define CUT (K_CUT) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Copy */ +#define K_COPY (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_COPY)) +#define COPY (K_COPY) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Paste */ +#define K_PASTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PASTE)) +#define PSTE (K_PASTE) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Find */ +#define K_FIND (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_FIND)) + +/* Keyboard Mute */ +#define K_MUTE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_MUTE)) + +/* Keyboard Volume Up */ +#define K_VOLUME_UP (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_UP)) +#define K_VOL_UP (K_VOLUME_UP) +#define VOLU (K_VOLUME_UP) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Volume Down */ +#define K_VOLUME_DOWN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_VOLUME_DOWN)) +#define K_VOL_DN (K_VOLUME_DOWN) +#define VOLD (K_VOLUME_DOWN) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Locking Caps Lock */ +#define LOCKING_CAPS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_CAPS_LOCK)) +#define LCAPS (LOCKING_CAPS) + +/* Keyboard Locking Num Lock */ +#define LOCKING_NUM (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_NUM_LOCK)) +#define LNLCK (LOCKING_NUM) + +/* Keyboard Locking Scroll Lock */ +#define LOCKING_SCROLL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LOCKING_SCROLL_LOCK)) +#define LSLCK (LOCKING_SCROLL) + +/* Keypad , (Comma) */ +#define KP_COMMA (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_COMMA)) + +/* Keypad = (Equal) AS/400 */ +#define KP_EQUAL_AS400 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_EQUAL_SIGN)) + +/* Keyboard International 1 */ +#define INTERNATIONAL_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL1)) +#define INT1 (INTERNATIONAL_1) +#define INT_RO (INTERNATIONAL_1) + +/* Keyboard International 2 */ +#define INTERNATIONAL_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL2)) +#define INT2 (INTERNATIONAL_2) +#define INT_KATAKANAHIRAGANA (INTERNATIONAL_2) +#define INT_KANA (INTERNATIONAL_2) + +/* Keyboard International 3 */ +#define INTERNATIONAL_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL3)) +#define INT3 (INTERNATIONAL_3) +#define INT_YEN (INTERNATIONAL_3) + +/* Keyboard International 4 */ +#define INTERNATIONAL_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL4)) +#define INT4 (INTERNATIONAL_4) +#define INT_HENKAN (INTERNATIONAL_4) + +/* Keyboard International 5 */ +#define INTERNATIONAL_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL5)) +#define INT5 (INTERNATIONAL_5) +#define INT_MUHENKAN (INTERNATIONAL_5) + +/* Keyboard International 6 */ +#define INTERNATIONAL_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL6)) +#define INT6 (INTERNATIONAL_6) +#define INT_KPJPCOMMA (INTERNATIONAL_6) + +/* Keyboard International 7 */ +#define INTERNATIONAL_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL7)) +#define INT7 (INTERNATIONAL_7) + +/* Keyboard International 8 */ +#define INTERNATIONAL_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL8)) +#define INT8 (INTERNATIONAL_8) + +/* Keyboard International 9 */ +#define INTERNATIONAL_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_INTERNATIONAL9)) +#define INT9 (INTERNATIONAL_9) + +/* Keyboard Language 1 */ +#define LANGUAGE_1 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG1)) +#define LANG1 (LANGUAGE_1) +#define LANG_HANGEUL (LANGUAGE_1) + +/* Keyboard Language 2 */ +#define LANGUAGE_2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG2)) +#define LANG2 (LANGUAGE_2) +#define LANG_HANJA (LANGUAGE_2) + +/* Keyboard Language 3 */ +#define LANGUAGE_3 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG3)) +#define LANG3 (LANGUAGE_3) +#define LANG_KATAKANA (LANGUAGE_3) + +/* Keyboard Language 4 */ +#define LANGUAGE_4 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG4)) +#define LANG4 (LANGUAGE_4) +#define LANG_HIRAGANA (LANGUAGE_4) + +/* Keyboard Language 5 */ +#define LANGUAGE_5 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG5)) +#define LANG5 (LANGUAGE_5) +#define LANG_ZENKAKUHANKAKU (LANGUAGE_5) + +/* Keyboard Language 6 */ +#define LANGUAGE_6 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG6)) +#define LANG6 (LANGUAGE_6) + +/* Keyboard Language 7 */ +#define LANGUAGE_7 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG7)) +#define LANG7 (LANGUAGE_7) + +/* Keyboard Language 8 */ +#define LANGUAGE_8 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG8)) +#define LANG8 (LANGUAGE_8) + +/* Keyboard Language 9 */ +#define LANGUAGE_9 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LANG9)) +#define LANG9 (LANGUAGE_9) + +/* Keyboard Alternate Erase */ +#define ALT_ERASE (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_ALTERNATE_ERASE)) + +/* Keyboard SysReq/Attention */ +#define SYSREQ (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SYSREQ_ATTENTION)) +#define ATTENTION (SYSREQ) + +/* Keyboard Cancel */ +#define K_CANCEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CANCEL)) + +/* Keyboard Clear */ +#define CLEAR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR)) + +/* Keyboard Prior */ +#define PRIOR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_PRIOR)) + +/* Keyboard Return */ +#define RETURN2 (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RETURN)) +#define RET2 (RETURN2) + +/* Keyboard Separator */ +#define SEPARATOR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_SEPARATOR)) + +/* Keyboard Out */ +#define OUT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OUT)) + +/* Keyboard Oper */ +#define OPER (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_OPER)) + +/* Keyboard Clear/Again */ +#define CLEAR_AGAIN (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CLEAR_AGAIN)) + +/* Keyboard CrSel/Props */ +#define CRSEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_CRSEL_PROPS)) + +/* Keyboard ExSel */ +#define EXSEL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_EXSEL)) + +/* Keyboard Currency Unit */ +#define CURU \ + (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_CURRENCY_UNIT)) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad ( (Left Parenthesis) */ +#define KP_LEFT_PARENTHESIS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_LEFT_PARENTHESIS)) +#define KP_LPAR (KP_LEFT_PARENTHESIS) + +/* Keypad ) (Right Parenthesis) */ +#define KP_RIGHT_PARENTHESIS (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_RIGHT_PARENTHESIS)) +#define KP_RPAR (KP_RIGHT_PARENTHESIS) + +/* Keypad Space */ +#define KSPC \ + (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_SPACE)) // WARNING: DEPRECATED (DO NOT USE) + +/* Keypad Clear */ +#define KP_CLEAR (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYPAD_CLEAR)) + +/* Keyboard Left Control */ +#define LEFT_CONTROL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTCONTROL)) +#define LCTRL (LEFT_CONTROL) +#define LCTL (LEFT_CONTROL) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Left Shift */ +#define LEFT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTSHIFT)) +#define LSHFT (LEFT_SHIFT) +#define LSFT (LEFT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Left Alt */ +#define LEFT_ALT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTALT)) +#define LALT (LEFT_ALT) + +/* Keyboard Left GUI (Windows / Command / Meta) */ +#define LEFT_GUI (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFT_GUI)) +#define LGUI (LEFT_GUI) +#define LEFT_WIN (LEFT_GUI) +#define LWIN (LEFT_GUI) +#define LEFT_COMMAND (LEFT_GUI) +#define LCMD (LEFT_GUI) +#define LEFT_META (LEFT_GUI) +#define LMETA (LEFT_GUI) + +/* Keyboard Right Control */ +#define RIGHT_CONTROL (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTCONTROL)) +#define RCTRL (RIGHT_CONTROL) +#define RCTL (RIGHT_CONTROL) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Right Shift */ +#define RIGHT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT)) +#define RSHFT (RIGHT_SHIFT) +#define RSFT (RIGHT_SHIFT) // WARNING: DEPRECATED (DO NOT USE) + +/* Keyboard Right Alt */ +#define RIGHT_ALT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTALT)) +#define RALT (RIGHT_ALT) + +/* Keyboard Right GUI (Windows / Command / Meta) */ +#define RIGHT_GUI (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHT_GUI)) +#define RGUI (RIGHT_GUI) +#define RIGHT_WIN (RIGHT_GUI) +#define RWIN (RIGHT_GUI) +#define RIGHT_COMMAND (RIGHT_GUI) +#define RCMD (RIGHT_GUI) +#define RIGHT_META (RIGHT_GUI) +#define RMETA (RIGHT_GUI) + +/* Keyboard Play/Pause */ +#define K_PLAY_PAUSE (HID_USAGE(HID_USAGE_KEY, 0xE8)) +#define K_PP (K_PLAY_PAUSE) + +/* Keyboard Stop */ +#define K_STOP2 (HID_USAGE(HID_USAGE_KEY, 0xE9)) + +/* Keyboard Previous */ +#define K_PREVIOUS (HID_USAGE(HID_USAGE_KEY, 0xEA)) +#define K_PREV (K_PREVIOUS) + +/* Keyboard Next */ +#define K_NEXT (HID_USAGE(HID_USAGE_KEY, 0xEB)) + +/* Keyboard Eject */ +#define K_EJECT (HID_USAGE(HID_USAGE_KEY, 0xEC)) + +/* Keyboard Volume Up */ +#define K_VOLUME_UP2 (HID_USAGE(HID_USAGE_KEY, 0xED)) +#define K_VOL_UP2 (K_VOLUME_UP2) + +/* Keyboard Volume Down */ +#define K_VOLUME_DOWN2 (HID_USAGE(HID_USAGE_KEY, 0xEE)) +#define K_VOL_DN2 (K_VOLUME_DOWN2) + +/* Keyboard Mute */ +#define K_MUTE2 (HID_USAGE(HID_USAGE_KEY, 0xEF)) + +/* Keyboard WWW */ +#define K_WWW (HID_USAGE(HID_USAGE_KEY, 0xF0)) + +/* Keyboard Back */ +#define K_BACK (HID_USAGE(HID_USAGE_KEY, 0xF1)) + +/* Keyboard Forward */ +#define K_FORWARD (HID_USAGE(HID_USAGE_KEY, 0xF2)) + +/* Keyboard Stop */ +#define K_STOP3 (HID_USAGE(HID_USAGE_KEY, 0xF3)) + +/* Keyboard Find */ +#define K_FIND2 (HID_USAGE(HID_USAGE_KEY, 0xF4)) + +/* Keyboard Scroll Up */ +#define K_SCROLL_UP (HID_USAGE(HID_USAGE_KEY, 0xF5)) + +/* Keyboard Scroll Down */ +#define K_SCROLL_DOWN (HID_USAGE(HID_USAGE_KEY, 0xF6)) + +/* Keyboard Edit */ +#define K_EDIT (HID_USAGE(HID_USAGE_KEY, 0xF7)) + +/* Keyboard Sleep */ +#define K_SLEEP (HID_USAGE(HID_USAGE_KEY, 0xF8)) + +/* Keyboard Lock */ +#define K_LOCK (HID_USAGE(HID_USAGE_KEY, 0xF9)) +#define K_SCREENSAVER (K_LOCK) +#define K_COFFEE (K_LOCK) + +/* Keyboard Refresh */ +#define K_REFRESH (HID_USAGE(HID_USAGE_KEY, 0xFA)) + +/* Keyboard Calculator */ +#define K_CALCULATOR (HID_USAGE(HID_USAGE_KEY, 0xFB)) +#define K_CALC (K_CALCULATOR) + +/* Consumer Power */ +#define C_POWER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_POWER)) +#define C_PWR (C_POWER) + +/* Consumer Reset */ +#define C_RESET (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RESET)) + +/* Consumer Sleep */ +#define C_SLEEP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP)) + +/* Consumer Sleep Mode */ +#define C_SLEEP_MODE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLEEP_MODE)) + +/* Consumer Menu */ +#define C_MENU (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU)) + +/* Consumer Menu Pick */ +#define C_MENU_PICK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_PICK)) +#define C_MENU_SELECT (C_MENU_PICK) + +/* Consumer Menu Up */ +#define C_MENU_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_UP)) + +/* Consumer Menu Down */ +#define C_MENU_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_DOWN)) + +/* Consumer Menu Left */ +#define C_MENU_LEFT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_LEFT)) + +/* Consumer Menu Right */ +#define C_MENU_RIGHT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_RIGHT)) + +/* Consumer Menu Escape */ +#define C_MENU_ESCAPE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_ESCAPE)) +#define C_MENU_ESC (C_MENU_ESCAPE) + +/* Consumer Menu Value Increase */ +#define C_MENU_INCREASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_INCREASE)) +#define C_MENU_INC (C_MENU_INCREASE) + +/* Consumer Menu Value Decrease */ +#define C_MENU_DECREASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MENU_VALUE_DECREASE)) +#define C_MENU_DEC (C_MENU_DECREASE) + +/* Consumer Data On Screen */ +#define C_DATA_ON_SCREEN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DATA_ON_SCREEN)) + +/* Consumer Closed Caption */ +#define C_CAPTIONS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CLOSED_CAPTION)) +#define C_SUBTITILES (C_CAPTIONS) + +/* Consumer Snapshot */ +#define C_SNAPSHOT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SNAPSHOT)) + +/* Consumer Picture-in-Picture Toggle */ +#define C_PIP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PICTURE_IN_PICTURE_TOGGLE)) + +/* Consumer Red Menu Button */ +#define C_RED_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RED_MENU_BUTTON)) +#define C_RED (C_RED_BUTTON) + +/* Consumer Green Menu Button */ +#define C_GREEN_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_GREEN_MENU_BUTTON)) +#define C_GREEN (C_GREEN_BUTTON) + +/* Consumer Blue Menu Button */ +#define C_BLUE_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BLUE_MENU_BUTTON)) +#define C_BLUE (C_BLUE_BUTTON) + +/* Consumer Yellow Menu Button */ +#define C_YELLOW_BUTTON (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_YELLOW_MENU_BUTTON)) +#define C_YELLOW (C_YELLOW_BUTTON) + +/* Consumer Aspect */ +#define C_ASPECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ASPECT)) + +/* Consumer Display Brightness Increment */ +#define C_BRIGHTNESS_INC \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_INCREMENT)) +#define C_BRI_INC (C_BRIGHTNESS_INC) +#define C_BRI_UP (C_BRIGHTNESS_INC) + +/* Consumer Display Brightness Decrement */ +#define C_BRIGHTNESS_DEC \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BRIGHTNESS_DECREMENT)) +#define C_BRI_DEC (C_BRIGHTNESS_DEC) +#define C_BRI_DN (C_BRIGHTNESS_DEC) + +/* Consumer Display Backlight Toggle */ +#define C_BACKLIGHT_TOGGLE \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_BACKLIGHT_TOGGLE)) +#define C_BKLT_TOG (C_BACKLIGHT_TOGGLE) + +/* Consumer Display Set Brightness to Minimum */ +#define C_BRIGHTNESS_MINIMUM \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MINIMUM)) +#define C_BRI_MIN (C_BRIGHTNESS_MINIMUM) + +/* Consumer Display Set Brightness to Maximum */ +#define C_BRIGHTNESS_MAXIMUM \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_BRIGHTNESS_TO_MAXIMUM)) +#define C_BRI_MAX (C_BRIGHTNESS_MAXIMUM) + +/* Consumer Display Set Auto Brightness */ +#define C_BRIGHTNESS_AUTO \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_DISPLAY_SET_AUTO_BRIGHTNESS)) +#define C_BRI_AUTO (C_BRIGHTNESS_AUTO) + +/* Consumer Mode Step */ +#define C_MEDIA_STEP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MODE_STEP)) +#define C_MODE_STEP (C_MEDIA_STEP) + +/* Consumer Recall Last */ +#define C_RECALL_LAST (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECALL_LAST)) +#define C_CHAN_LAST (C_RECALL_LAST) + +/* Consumer Media Select Computer */ +#define C_MEDIA_COMPUTER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_COMPUTER)) + +/* Consumer Media Select TV */ +#define C_MEDIA_TV (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TV)) + +/* Consumer Media Select WWW */ +#define C_MEDIA_WWW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_WWW)) + +/* Consumer Media Select DVD */ +#define C_MEDIA_DVD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_DVD)) + +/* Consumer Media Select Telephone */ +#define C_MEDIA_PHONE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TELEPHONE)) + +/* Consumer Media Select Program Guide */ +#define C_MEDIA_GUIDE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_PROGRAM_GUIDE)) + +/* Consumer Media Select Video Phone */ +#define C_MEDIA_VIDEOPHONE \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VIDEO_PHONE)) + +/* Consumer Media Select Games */ +#define C_MEDIA_GAMES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_GAMES)) + +/* Consumer Media Select Messages */ +#define C_MEDIA_MESSAGES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_MESSAGES)) + +/* Consumer Media Select CD */ +#define C_MEDIA_CD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CD)) + +/* Consumer Media Select VCR */ +#define C_MEDIA_VCR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_VCR)) + +/* Consumer Media Select Tuner */ +#define C_MEDIA_TUNER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TUNER)) + +/* Consumer Quit */ +#define C_QUIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_QUIT)) + +/* Consumer Help */ +#define C_HELP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_HELP)) + +/* Consumer Media Select Tape */ +#define C_MEDIA_TAPE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_TAPE)) + +/* Consumer Media Select Cable */ +#define C_MEDIA_CABLE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_CABLE)) + +/* Consumer Media Select Satellite */ +#define C_MEDIA_SATELLITE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_SATELLITE)) + +/* Consumer Media Select Home */ +#define C_MEDIA_HOME (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MEDIA_SELECT_HOME)) + +/* Consumer Channel Increment */ +#define C_CHANNEL_INC (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_INCREMENT)) +#define C_CHAN_INC (C_CHANNEL_INC) + +/* Consumer Channel Decrement */ +#define C_CHANNEL_DEC (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_CHANNEL_DECREMENT)) +#define C_CHAN_DEC (C_CHANNEL_DEC) + +/* Consumer VCR Plus */ +#define C_MEDIA_VCR_PLUS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VCR_PLUS)) + +/* Consumer Play */ +#define C_PLAY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY)) + +/* Consumer Pause */ +#define C_PAUSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PAUSE)) + +/* Consumer Record */ +#define C_RECORD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RECORD)) +#define C_REC (C_RECORD) + +/* Consumer Fast Forward */ +#define C_FAST_FORWARD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_FAST_FORWARD)) +#define C_FF (C_FAST_FORWARD) + +/* Consumer Rewind */ +#define C_REWIND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REWIND)) +#define C_RW (C_REWIND) + +/* Consumer Scan Next Track */ +#define C_NEXT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_NEXT_TRACK)) +#define M_NEXT (C_NEXT) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Scan Previous Track */ +#define C_PREVIOUS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SCAN_PREVIOUS_TRACK)) +#define C_PREV (C_PREVIOUS) +#define M_PREV (C_PREVIOUS) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Stop */ +#define C_STOP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP)) +#define M_STOP (C_STOP) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Eject */ +#define C_EJECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_EJECT)) +#define M_EJCT (C_EJECT) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Random Play */ +#define C_RANDOM_PLAY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_RANDOM_PLAY)) +#define C_SHUFFLE (C_RANDOM_PLAY) + +/* Consumer Repeat */ +#define C_REPEAT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_REPEAT)) + +/* Consumer Slow Tracking */ +#define C_SLOW_TRACKING (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW_TRACKING)) +#define C_SLOW2 (C_SLOW_TRACKING) + +/* Consumer Stop/Eject */ +#define C_STOP_EJECT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_STOP_EJECT)) + +/* Consumer Play/Pause */ +#define C_PLAY_PAUSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_PLAY_PAUSE)) +#define C_PP (C_PLAY_PAUSE) +#define M_PLAY (C_PLAY_PAUSE) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Voice Command */ +#define C_VOICE_COMMAND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOICE_COMMAND)) + +/* Consumer Mute */ +#define C_MUTE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_MUTE)) +#define M_MUTE (C_MUTE) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Bass Boost */ +#define C_BASS_BOOST (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_BASS_BOOST)) + +/* Consumer Volume Increment */ +#define C_VOLUME_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_INCREMENT)) +#define C_VOL_UP (C_VOLUME_UP) +#define M_VOLU (C_VOLUME_UP) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Volume Decrement */ +#define C_VOLUME_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_VOLUME_DECREMENT)) +#define C_VOL_DN (C_VOLUME_DOWN) +#define M_VOLD (C_VOLUME_DOWN) // WARNING: DEPRECATED (DO NOT USE) + +/* Consumer Slow */ +#define C_SLOW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_SLOW)) + +/* Consumer Alternate Audio Increment */ +#define C_ALTERNATE_AUDIO_INCREMENT \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_ALTERNATE_AUDIO_INCREMENT)) +#define C_ALT_AUDIO_INC (C_ALTERNATE_AUDIO_INCREMENT) + +/* Consumer AL Consumer Control Configuration */ +#define C_AL_CCC \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONSUMER_CONTROL_CONFIGURATION)) + +/* Consumer AL Word Processor */ +#define C_AL_WORD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_WORD_PROCESSOR)) + +/* Consumer AL Text Editor */ +#define C_AL_TEXT_EDITOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TEXT_EDITOR)) + +/* Consumer AL Spreadsheet */ +#define C_AL_SPREADSHEET (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPREADSHEET)) +#define C_AL_SHEET (C_AL_SPREADSHEET) + +/* Consumer AL Graphics Editor */ +#define C_AL_GRAPHICS_EDITOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_GRAPHICS_EDITOR)) + +/* Consumer AL Presentation App */ +#define C_AL_PRESENTATION (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PRESENTATION_APP)) + +/* Consumer AL Database App */ +#define C_AL_DATABASE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DATABASE_APP)) +#define C_AL_DB (C_AL_DATABASE) + +/* Consumer AL Email Reader */ +#define C_AL_EMAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_EMAIL_READER)) +#define C_AL_MAIL (C_AL_EMAIL) + +/* Consumer AL Newsreader */ +#define C_AL_NEWS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEWSREADER)) + +/* Consumer AL Voicemail */ +#define C_AL_VOICEMAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_VOICEMAIL)) + +/* Consumer AL Contacts/Address Book */ +#define C_AL_CONTACTS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTACTS_ADDRESS_BOOK)) +#define C_AL_ADDRESS_BOOK (C_AL_CONTACTS) + +/* Consumer AL Calendar/Schedule */ +#define C_AL_CALENDAR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALENDAR_SCHEDULE)) +#define C_AL_CAL (C_AL_CALENDAR) + +/* Consumer AL Task/Project Manager */ +#define C_AL_TASK_MANAGER \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TASK_PROJECT_MANAGER)) + +/* Consumer AL Log/Journal/Timecard */ +#define C_AL_JOURNAL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOG_JOURNAL_TIMECARD)) + +/* Consumer AL Checkbook/Finance */ +#define C_AL_FINANCE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CHECKBOOK_FINANCE)) + +/* Consumer AL Calculator */ +#define C_AL_CALCULATOR (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CALCULATOR)) +#define C_AL_CALC (C_AL_CALCULATOR) + +/* Consumer AL A/V Capture/Playback */ +#define C_AL_AV_CAPTURE_PLAYBACK \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_A_V_CAPTURE_PLAYBACK)) + +/* Consumer AL Local Machine Browser */ +#define C_AL_MY_COMPUTER \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOCAL_MACHINE_BROWSER)) + +/* Consumer AL Internet Browser */ +#define C_AL_WWW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTERNET_BROWSER)) + +/* Consumer AL Network Chat */ +#define C_AL_NETWORK_CHAT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NETWORK_CHAT)) +#define C_AL_CHAT (C_AL_NETWORK_CHAT) + +/* Consumer AL Logoff */ +#define C_AL_LOGOFF (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_LOGOFF)) + +/* Consumer AL Terminal Lock/Screensaver */ +#define C_AL_LOCK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_TERMINAL_LOCK_SCREENSAVER)) +#define C_AL_SCREENSAVER (C_AL_LOCK) +#define C_AL_COFFEE (C_AL_LOCK) + +/* Consumer AL Control Panel */ +#define C_AL_CONTROL_PANEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_CONTROL_PANEL)) + +/* Consumer AL Select Task/Application */ +#define C_AL_SELECT_TASK \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SELECT_TASK_APPLICATION)) + +/* Consumer AL Next Task/Application */ +#define C_AL_NEXT_TASK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_NEXT_TASK_APPLICATION)) + +/* Consumer AL Previous Task/Application */ +#define C_AL_PREVIOUS_TASK \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_PREVIOUS_TASK_APPLICATION)) +#define C_AL_PREV_TASK (C_AL_PREVIOUS_TASK) + +/* Consumer AL Integrated Help Center */ +#define C_AL_HELP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INTEGRATED_HELP_CENTER)) + +/* Consumer AL Documents */ +#define C_AL_DOCUMENTS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_DOCUMENTS)) +#define C_AL_DOCS (C_AL_DOCUMENTS) + +/* Consumer AL Spell Check */ +#define C_AL_SPELLCHECK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SPELL_CHECK)) +#define C_AL_SPELL (C_AL_SPELLCHECK) + +/* Consumer AL Keyboard Layout */ +#define C_AL_KEYBOARD_LAYOUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_KEYBOARD_LAYOUT)) + +/* Consumer AL Screen Saver */ +#define C_AL_SCREEN_SAVER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_SCREEN_SAVER)) + +/* Consumer AL File Browser */ +#define C_AL_FILE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_FILE_BROWSER)) +#define C_AL_FILES (C_AL_FILE_BROWSER) + +/* Consumer AL Image Browser */ +#define C_AL_IMAGE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_IMAGE_BROWSER)) +#define C_AL_IMAGES (C_AL_IMAGE_BROWSER) + +/* Consumer AL Audio Browser */ +#define C_AL_AUDIO_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_AUDIO_BROWSER)) +#define C_AL_AUDIO (C_AL_AUDIO_BROWSER) +#define C_AL_MUSIC (C_AL_AUDIO_BROWSER) + +/* Consumer AL Movie Browser */ +#define C_AL_MOVIE_BROWSER (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_MOVIE_BROWSER)) +#define C_AL_MOVIES (C_AL_MOVIE_BROWSER) + +/* Consumer AL Instant Messaging */ +#define C_AL_INSTANT_MESSAGING \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_INSTANT_MESSAGING)) +#define C_AL_IM (C_AL_INSTANT_MESSAGING) + +/* Consumer AL OEM Features/Tips/Tutorial Browser */ +#define C_AL_OEM_FEATURES \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AL_OEM_FEATURES_TIPS_TUTORIAL_BROWSER)) +#define C_AL_TIPS (C_AL_OEM_FEATURES) +#define C_AL_TUTORIAL (C_AL_OEM_FEATURES) + +/* Consumer AC New */ +#define C_AC_NEW (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_NEW)) + +/* Consumer AC Open */ +#define C_AC_OPEN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_OPEN)) + +/* Consumer AC Close */ +#define C_AC_CLOSE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CLOSE)) + +/* Consumer AC Exit */ +#define C_AC_EXIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EXIT)) + +/* Consumer AC Save */ +#define C_AC_SAVE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SAVE)) + +/* Consumer AC Print */ +#define C_AC_PRINT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PRINT)) + +/* Consumer AC Properties */ +#define C_AC_PROPERTIES (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PROPERTIES)) +#define C_AC_PROPS (C_AC_PROPERTIES) + +/* Consumer AC Undo */ +#define C_AC_UNDO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_UNDO)) + +/* Consumer AC Copy */ +#define C_AC_COPY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_COPY)) + +/* Consumer AC Cut */ +#define C_AC_CUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CUT)) + +/* Consumer AC Paste */ +#define C_AC_PASTE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_PASTE)) + +/* Consumer AC Find */ +#define C_AC_FIND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FIND)) + +/* Consumer AC Search */ +#define C_AC_SEARCH (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEARCH)) + +/* Consumer AC Go To */ +#define C_AC_GOTO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_GO_TO)) + +/* Consumer AC Home */ +#define C_AC_HOME (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_HOME)) + +/* Consumer AC Back */ +#define C_AC_BACK (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BACK)) + +/* Consumer AC Forward */ +#define C_AC_FORWARD (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD)) + +/* Consumer AC Stop */ +#define C_AC_STOP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_STOP)) + +/* Consumer AC Refresh */ +#define C_AC_REFRESH (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REFRESH)) + +/* Consumer AC Bookmarks */ +#define C_AC_BOOKMARKS (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_BOOKMARKS)) +#define C_AC_FAVORITES (C_AC_BOOKMARKS) +#define C_AC_FAVOURITES (C_AC_BOOKMARKS) + +/* Consumer AC Zoom In */ +#define C_AC_ZOOM_IN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_IN)) + +/* Consumer AC Zoom Out */ +#define C_AC_ZOOM_OUT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM_OUT)) + +/* Consumer AC Zoom */ +#define C_AC_ZOOM (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_ZOOM)) + +/* Consumer AC View Toggle */ +#define C_AC_VIEW_TOGGLE (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_VIEW_TOGGLE)) + +/* Consumer AC Scroll Up */ +#define C_AC_SCROLL_UP (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_UP)) + +/* Consumer AC Scroll Down */ +#define C_AC_SCROLL_DOWN (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SCROLL_DOWN)) + +/* Consumer AC Edit */ +#define C_AC_EDIT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_EDIT)) + +/* Consumer AC Cancel */ +#define C_AC_CANCEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_CANCEL)) + +/* Consumer AC Insert Mode */ +#define C_AC_INSERT (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_INSERT_MODE)) +#define C_AC_INS (C_AC_INSERT) + +/* Consumer AC Delete */ +#define C_AC_DEL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DELETE)) + +/* Consumer AC Redo/Repeat */ +#define C_AC_REDO (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REDO_REPEAT)) + +/* Consumer AC Reply */ +#define C_AC_REPLY (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_REPLY)) + +/* Consumer AC Forward Msg */ +#define C_AC_FORWARD_MAIL (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_FORWARD_MSG)) + +/* Consumer AC Send */ +#define C_AC_SEND (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_SEND)) + +/* Consumer AC Desktop Show All Windows */ +#define C_AC_DESKTOP_SHOW_ALL_WINDOWS \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_AC_DESKTOP_SHOW_ALL_WINDOWS)) + +/* Consumer Keyboard Input Assist Previous */ +#define C_KEYBOARD_INPUT_ASSIST_PREVIOUS \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS)) +#define C_KBIA_PREV (C_KEYBOARD_INPUT_ASSIST_PREVIOUS) + +/* Consumer Keyboard Input Assist Next */ +#define C_KEYBOARD_INPUT_ASSIST_NEXT \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT)) +#define C_KBIA_NEXT (C_KEYBOARD_INPUT_ASSIST_NEXT) + +/* Consumer Keyboard Input Assist Previous Group */ +#define C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP)) +#define C_KBIA_PREV_GRP (C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP) + +/* Consumer Keyboard Input Assist Next Group */ +#define C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_NEXT_GROUP)) +#define C_KBIA_NEXT_GRP (C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP) + +/* Consumer Keyboard Input Assist Accept */ +#define C_KEYBOARD_INPUT_ASSIST_ACCEPT \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_ACCEPT)) +#define C_KBIA_ACCEPT (C_KEYBOARD_INPUT_ASSIST_ACCEPT) + +/* Consumer Keyboard Input Assist Cancel */ +#define C_KEYBOARD_INPUT_ASSIST_CANCEL \ + (HID_USAGE(HID_USAGE_CONSUMER, HID_USAGE_CONSUMER_KEYBOARD_INPUT_ASSIST_CANCEL)) +#define C_KBIA_CANCEL (C_KEYBOARD_INPUT_ASSIST_CANCEL) diff --git a/zmk/app/include/dt-bindings/zmk/kscan-mock.h b/zmk/app/include/dt-bindings/zmk/kscan-mock.h new file mode 100644 index 00000000..eff218b2 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/kscan-mock.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#define ZMK_MOCK_IS_PRESS(v) ((v & (0x01 << 31)) != 0) +#define ZMK_MOCK_PRESS(row, col, msec) (row + (col << 8) + (msec << 16) + (0x01 << 31)) +#define ZMK_MOCK_RELEASE(row, col, msec) (row + (col << 8) + (msec << 16)) +#define ZMK_MOCK_ROW(v) (v & 0xFF) +#define ZMK_MOCK_COL(v) ((v >> 8) & 0xFF) +#define ZMK_MOCK_MSEC(v) ((v & ~(0x01 << 31)) >> 16) diff --git a/zmk/app/include/dt-bindings/zmk/matrix-transform.h b/zmk/app/include/dt-bindings/zmk/matrix-transform.h new file mode 100644 index 00000000..2989cb60 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/matrix-transform.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define KT_ROW(item) (item >> 8) +#define KT_COL(item) (item & 0xFF) + +#define RC(row, col) (((row) << 8) + (col)) \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/modifiers.h b/zmk/app/include/dt-bindings/zmk/modifiers.h new file mode 100644 index 00000000..b49849d0 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/modifiers.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ +#pragma once + +#define MOD_LCTL 0x01 +#define MOD_LSFT 0x02 +#define MOD_LALT 0x04 +#define MOD_LGUI 0x08 +#define MOD_RCTL 0x10 +#define MOD_RSFT 0x20 +#define MOD_RALT 0x40 +#define MOD_RGUI 0x80 + +#define SELECT_MODS(keycode) (keycode >> 24) +#define STRIP_MODS(keycode) (keycode & ~(0xFF << 24)) +#define APPLY_MODS(mods, keycode) (mods << 24 | keycode) + +#define LC(keycode) APPLY_MODS(MOD_LCTL, keycode) +#define LS(keycode) APPLY_MODS(MOD_LSFT, keycode) +#define LA(keycode) APPLY_MODS(MOD_LALT, keycode) +#define LG(keycode) APPLY_MODS(MOD_LGUI, keycode) +#define RC(keycode) APPLY_MODS(MOD_RCTL, keycode) +#define RS(keycode) APPLY_MODS(MOD_RSFT, keycode) +#define RA(keycode) APPLY_MODS(MOD_RALT, keycode) +#define RG(keycode) APPLY_MODS(MOD_RGUI, keycode) \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/outputs.h b/zmk/app/include/dt-bindings/zmk/outputs.h new file mode 100644 index 00000000..f24380f7 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/outputs.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define OUT_TOG 0 +#define OUT_USB 1 +#define OUT_BLE 2 \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/reset.h b/zmk/app/include/dt-bindings/zmk/reset.h new file mode 100644 index 00000000..2b3d8760 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/reset.h @@ -0,0 +1,13 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define RST_WARM 0x00 +#define RST_COLD 0x01 + +// AdaFruit nrf52 Bootloader Specific. See +// https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/d6b28e66053eea467166f44875e3c7ec741cb471/src/main.c#L107 + +#define RST_UF2 0x57 \ No newline at end of file diff --git a/zmk/app/include/dt-bindings/zmk/rgb.h b/zmk/app/include/dt-bindings/zmk/rgb.h new file mode 100644 index 00000000..eb721807 --- /dev/null +++ b/zmk/app/include/dt-bindings/zmk/rgb.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define RGB_TOG 0 +#define RGB_HUI 1 +#define RGB_HUD 2 +#define RGB_SAI 3 +#define RGB_SAD 4 +#define RGB_BRI 5 +#define RGB_BRD 6 +#define RGB_SPI 7 +#define RGB_SPD 8 +#define RGB_EFF 9 +#define RGB_EFR 10 diff --git a/zmk/app/include/linker/zmk-events.ld b/zmk/app/include/linker/zmk-events.ld new file mode 100644 index 00000000..78d00bb7 --- /dev/null +++ b/zmk/app/include/linker/zmk-events.ld @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + + __event_type_start = .; \ + KEEP(*(".event_type")); \ + __event_type_end = .; \ + + __event_subscriptions_start = .; \ + KEEP(*(".event_subscription")); \ + __event_subscriptions_end = .; \ + diff --git a/zmk/app/include/zmk/behavior.h b/zmk/app/include/zmk/behavior.h new file mode 100644 index 00000000..428ae243 --- /dev/null +++ b/zmk/app/include/zmk/behavior.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +struct zmk_behavior_binding { + char *behavior_dev; + u32_t param1; + u32_t param2; +}; + +struct zmk_behavior_binding_event { + int layer; + u32_t position; + s64_t timestamp; +}; \ No newline at end of file diff --git a/zmk/app/include/zmk/ble.h b/zmk/app/include/zmk/ble.h new file mode 100644 index 00000000..56980c69 --- /dev/null +++ b/zmk/app/include/zmk/ble.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +int zmk_ble_clear_bonds(); +int zmk_ble_prof_next(); +int zmk_ble_prof_prev(); +int zmk_ble_prof_select(u8_t index); + +bt_addr_le_t *zmk_ble_active_profile_addr(); +bool zmk_ble_active_profile_is_connected(); +char *zmk_ble_active_profile_name(); + +int zmk_ble_unpair_all(); +bool zmk_ble_handle_key_user(struct zmk_key_event *key_event); + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) +void zmk_ble_set_peripheral_addr(bt_addr_le_t *addr); +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) */ \ No newline at end of file diff --git a/zmk/app/include/zmk/ble/profile.h b/zmk/app/include/zmk/ble/profile.h new file mode 100644 index 00000000..1df27436 --- /dev/null +++ b/zmk/app/include/zmk/ble/profile.h @@ -0,0 +1,16 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +#define ZMK_BLE_PROFILE_NAME_MAX 15 + +struct zmk_ble_profile { + char name[ZMK_BLE_PROFILE_NAME_MAX]; + bt_addr_le_t peer; +}; diff --git a/zmk/app/include/zmk/display.h b/zmk/app/include/zmk/display.h new file mode 100644 index 00000000..def43920 --- /dev/null +++ b/zmk/app/include/zmk/display.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_display_init(); +void zmk_display_task_handler(); \ No newline at end of file diff --git a/zmk/app/include/zmk/endpoints.h b/zmk/app/include/zmk/endpoints.h new file mode 100644 index 00000000..aad688e7 --- /dev/null +++ b/zmk/app/include/zmk/endpoints.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +enum zmk_endpoint { + ZMK_ENDPOINT_USB, + ZMK_ENDPOINT_BLE, +}; + +int zmk_endpoints_select(enum zmk_endpoint endpoint); +int zmk_endpoints_toggle(); + +int zmk_endpoints_send_report(u8_t usage_report); diff --git a/zmk/app/include/zmk/event-manager.h b/zmk/app/include/zmk/event-manager.h new file mode 100644 index 00000000..4b8f72c0 --- /dev/null +++ b/zmk/app/include/zmk/event-manager.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +struct zmk_event_type { + const char *name; +}; + +struct zmk_event_header { + const struct zmk_event_type *event; + u8_t last_listener_index; +}; + +#define ZMK_EV_EVENT_HANDLED 1 +#define ZMK_EV_EVENT_CAPTURED 2 + +typedef int (*zmk_listener_callback_t)(const struct zmk_event_header *eh); +struct zmk_listener { + zmk_listener_callback_t callback; +}; + +struct zmk_event_subscription { + const struct zmk_event_type *event_type; + const struct zmk_listener *listener; +}; + +#define ZMK_EVENT_DECLARE(event_type) \ + struct event_type *new_##event_type(); \ + bool is_##event_type(const struct zmk_event_header *eh); \ + struct event_type *cast_##event_type(const struct zmk_event_header *eh); \ + extern const struct zmk_event_type zmk_event_##event_type; + +#define ZMK_EVENT_IMPL(event_type) \ + const struct zmk_event_type zmk_event_##event_type = {.name = STRINGIFY(event_type)}; \ + const struct zmk_event_type *zmk_event_ref_##event_type __used \ + __attribute__((__section__(".event_type"))) = &zmk_event_##event_type; \ + struct event_type *new_##event_type() { \ + struct event_type *ev = (struct event_type *)k_malloc(sizeof(struct event_type)); \ + ev->header.event = &zmk_event_##event_type; \ + return ev; \ + }; \ + bool is_##event_type(const struct zmk_event_header *eh) { \ + return eh->event == &zmk_event_##event_type; \ + }; \ + struct event_type *cast_##event_type(const struct zmk_event_header *eh) { \ + return (struct event_type *)eh; \ + }; + +#define ZMK_LISTENER(mod, cb) const struct zmk_listener zmk_listener_##mod = {.callback = cb}; + +#define ZMK_SUBSCRIPTION(mod, ev_type) \ + const Z_DECL_ALIGN(struct zmk_event_subscription) \ + _CONCAT(_CONCAT(zmk_event_sub_, mod), ev_type) __used \ + __attribute__((__section__(".event_subscription"))) = { \ + .event_type = &zmk_event_##ev_type, \ + .listener = &zmk_listener_##mod, \ + }; + +#define ZMK_EVENT_RAISE(ev) zmk_event_manager_raise((struct zmk_event_header *)ev); + +#define ZMK_EVENT_RAISE_AFTER(ev, mod) \ + zmk_event_manager_raise_after((struct zmk_event_header *)ev, &zmk_listener_##mod); + +#define ZMK_EVENT_RAISE_AT(ev, mod) \ + zmk_event_manager_raise_at((struct zmk_event_header *)ev, &zmk_listener_##mod); + +#define ZMK_EVENT_RELEASE(ev) zmk_event_manager_release((struct zmk_event_header *)ev); + +int zmk_event_manager_raise(struct zmk_event_header *event); +int zmk_event_manager_raise_after(struct zmk_event_header *event, + const struct zmk_listener *listener); +int zmk_event_manager_raise_at(struct zmk_event_header *event, const struct zmk_listener *listener); +int zmk_event_manager_release(struct zmk_event_header *event); diff --git a/zmk/app/include/zmk/events/ble-active-profile-changed.h b/zmk/app/include/zmk/events/ble-active-profile-changed.h new file mode 100644 index 00000000..1e3a198b --- /dev/null +++ b/zmk/app/include/zmk/events/ble-active-profile-changed.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +#include + +struct ble_active_profile_changed { + struct zmk_event_header header; + u8_t index; + struct zmk_ble_profile *profile; +}; + +ZMK_EVENT_DECLARE(ble_active_profile_changed); diff --git a/zmk/app/include/zmk/events/keycode-state-changed.h b/zmk/app/include/zmk/events/keycode-state-changed.h new file mode 100644 index 00000000..7a423a57 --- /dev/null +++ b/zmk/app/include/zmk/events/keycode-state-changed.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include +#include +#include + +struct keycode_state_changed { + struct zmk_event_header header; + u8_t usage_page; + u32_t keycode; + u8_t implicit_modifiers; + bool state; +}; + +ZMK_EVENT_DECLARE(keycode_state_changed); + +static inline struct keycode_state_changed *keycode_state_changed_from_encoded(u32_t encoded, + bool pressed) { + u16_t page = HID_USAGE_PAGE(encoded) & 0xFF; + u16_t id = HID_USAGE_ID(encoded); + zmk_mod_flags implicit_mods = SELECT_MODS(encoded); + + if (!page) { + page = HID_USAGE_KEY; + } + + struct keycode_state_changed *ev = new_keycode_state_changed(); + ev->usage_page = page; + ev->keycode = id; + ev->implicit_modifiers = implicit_mods; + ev->state = pressed; + return ev; +} diff --git a/zmk/app/include/zmk/events/modifiers-state-changed.h b/zmk/app/include/zmk/events/modifiers-state-changed.h new file mode 100644 index 00000000..d2e02f82 --- /dev/null +++ b/zmk/app/include/zmk/events/modifiers-state-changed.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +struct modifiers_state_changed { + struct zmk_event_header header; + zmk_mod_flags modifiers; + bool state; +}; + +ZMK_EVENT_DECLARE(modifiers_state_changed); + +inline struct modifiers_state_changed *create_modifiers_state_changed(zmk_mod_flags modifiers, + bool state) { + struct modifiers_state_changed *ev = new_modifiers_state_changed(); + ev->modifiers = modifiers; + ev->state = state; + + return ev; +} \ No newline at end of file diff --git a/zmk/app/include/zmk/events/position-state-changed.h b/zmk/app/include/zmk/events/position-state-changed.h new file mode 100644 index 00000000..e4cbbbe7 --- /dev/null +++ b/zmk/app/include/zmk/events/position-state-changed.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +struct position_state_changed { + struct zmk_event_header header; + u32_t position; + bool state; + s64_t timestamp; +}; + +ZMK_EVENT_DECLARE(position_state_changed); \ No newline at end of file diff --git a/zmk/app/include/zmk/events/sensor-event.h b/zmk/app/include/zmk/events/sensor-event.h new file mode 100644 index 00000000..a9302a5c --- /dev/null +++ b/zmk/app/include/zmk/events/sensor-event.h @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include +#include + +struct sensor_event { + struct zmk_event_header header; + u8_t sensor_number; + struct device *sensor; +}; + +ZMK_EVENT_DECLARE(sensor_event); \ No newline at end of file diff --git a/zmk/app/include/zmk/events/usb-conn-state-changed.h b/zmk/app/include/zmk/events/usb-conn-state-changed.h new file mode 100644 index 00000000..d6cc6985 --- /dev/null +++ b/zmk/app/include/zmk/events/usb-conn-state-changed.h @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +#include +#include + +struct usb_conn_state_changed { + struct zmk_event_header header; + enum zmk_usb_conn_state conn_state; +}; + +ZMK_EVENT_DECLARE(usb_conn_state_changed); \ No newline at end of file diff --git a/zmk/app/include/zmk/handlers.h b/zmk/app/include/zmk/handlers.h new file mode 100644 index 00000000..92bd7e05 --- /dev/null +++ b/zmk/app/include/zmk/handlers.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +void zmk_handle_key(struct zmk_key_event key_event); diff --git a/zmk/app/include/zmk/hid.h b/zmk/app/include/zmk/hid.h new file mode 100644 index 00000000..63cdf3b8 --- /dev/null +++ b/zmk/app/include/zmk/hid.h @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +#include +#include +#include + +#define COLLECTION_REPORT 0x03 + +#define ZMK_HID_KEYPAD_NKRO_SIZE 6 + +#define ZMK_HID_CONSUMER_NKRO_SIZE 6 + +static const u8_t zmk_hid_report_desc[] = { + /* USAGE_PAGE (Generic Desktop) */ + HID_GI_USAGE_PAGE, + HID_USAGE_GD, + /* USAGE (Keyboard) */ + HID_LI_USAGE, + HID_USAGE_GD_KEYBOARD, + /* COLLECTION (Application) */ + HID_MI_COLLECTION, + COLLECTION_APPLICATION, + /* REPORT ID (1) */ + HID_GI_REPORT_ID, + 0x01, + /* USAGE_PAGE (Keyboard/Keypad) */ + HID_GI_USAGE_PAGE, + HID_USAGE_KEY, + /* USAGE_MINIMUM (Keyboard LeftControl) */ + HID_LI_USAGE_MIN(1), + 0xE0, + /* USAGE_MAXIMUM (Keyboard Right GUI) */ + HID_LI_USAGE_MAX(1), + 0xE7, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (1) */ + HID_GI_LOGICAL_MAX(1), + 0x01, + + /* REPORT_SIZE (1) */ + HID_GI_REPORT_SIZE, + 0x01, + /* REPORT_COUNT (8) */ + HID_GI_REPORT_COUNT, + 0x08, + /* INPUT (Data,Var,Abs) */ + HID_MI_INPUT, + 0x02, + + /* USAGE_PAGE (Keyboard/Keypad) */ + HID_GI_USAGE_PAGE, + HID_USAGE_KEY, + /* REPORT_SIZE (8) */ + HID_GI_REPORT_SIZE, + 0x08, + /* REPORT_COUNT (1) */ + HID_GI_REPORT_COUNT, + 0x01, + /* INPUT (Cnst,Var,Abs) */ + HID_MI_INPUT, + 0x03, + + /* USAGE_PAGE (Keyboard/Keypad) */ + HID_GI_USAGE_PAGE, + HID_USAGE_KEY, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (0xFF) */ + HID_GI_LOGICAL_MAX(1), + 0xFF, + /* USAGE_MINIMUM (Reserved) */ + HID_LI_USAGE_MIN(1), + 0x00, + /* USAGE_MAXIMUM (Keyboard Application) */ + HID_LI_USAGE_MAX(1), + 0xFF, + /* REPORT_SIZE (1) */ + HID_GI_REPORT_SIZE, + 0x08, + /* REPORT_COUNT (ZMK_HID_KEYPAD_NKRO_SIZE) */ + HID_GI_REPORT_COUNT, + ZMK_HID_KEYPAD_NKRO_SIZE, + /* INPUT (Data,Ary,Abs) */ + HID_MI_INPUT, + 0x00, + + /* END_COLLECTION */ + HID_MI_COLLECTION_END, + /* USAGE_PAGE (Consumer) */ + HID_GI_USAGE_PAGE, + HID_USAGE_CONSUMER, + /* USAGE (Consumer Control) */ + HID_LI_USAGE, + HID_USAGE_CONSUMER_CONSUMER_CONTROL, + /* Consumer Page */ + HID_MI_COLLECTION, + COLLECTION_APPLICATION, + /* REPORT ID (1) */ + HID_GI_REPORT_ID, + 0x02, + /* USAGE_PAGE (Consumer) */ + HID_GI_USAGE_PAGE, + HID_USAGE_CONSUMER, + /* LOGICAL_MINIMUM (0) */ + HID_GI_LOGICAL_MIN(1), + 0x00, + /* LOGICAL_MAXIMUM (0xFFFF) */ + HID_GI_LOGICAL_MAX(2), + 0xFF, + 0xFF, + HID_LI_USAGE_MIN(1), + 0x00, + /* USAGE_MAXIMUM (0xFFFF) */ + HID_LI_USAGE_MAX(2), + 0xFF, + 0xFF, + /* INPUT (Data,Ary,Abs) */ + /* REPORT_SIZE (16) */ + HID_GI_REPORT_SIZE, + 0x10, + /* REPORT_COUNT (ZMK_HID_CONSUMER_NKRO_SIZE) */ + HID_GI_REPORT_COUNT, + ZMK_HID_CONSUMER_NKRO_SIZE, + HID_MI_INPUT, + 0x00, + /* END COLLECTION */ + HID_MI_COLLECTION_END, +}; + +// struct zmk_hid_boot_report +// { +// u8_t modifiers; +// u8_t _unused; +// u8_t keys[6]; +// } __packed; + +struct zmk_hid_keypad_report_body { + zmk_mod_flags modifiers; + u8_t _reserved; + u8_t keys[ZMK_HID_KEYPAD_NKRO_SIZE]; +} __packed; + +struct zmk_hid_keypad_report { + u8_t report_id; + struct zmk_hid_keypad_report_body body; +} __packed; + +struct zmk_hid_consumer_report_body { + u16_t keys[ZMK_HID_CONSUMER_NKRO_SIZE]; +} __packed; + +struct zmk_hid_consumer_report { + u8_t report_id; + struct zmk_hid_consumer_report_body body; +} __packed; + +int zmk_hid_register_mod(zmk_mod modifier); +int zmk_hid_unregister_mod(zmk_mod modifier); +int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers); +int zmk_hid_implicit_modifiers_release(); +int zmk_hid_keypad_press(zmk_key key); +int zmk_hid_keypad_release(zmk_key key); +void zmk_hid_keypad_clear(); + +int zmk_hid_consumer_press(zmk_key key); +int zmk_hid_consumer_release(zmk_key key); +void zmk_hid_consumer_clear(); + +struct zmk_hid_keypad_report *zmk_hid_get_keypad_report(); +struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(); diff --git a/zmk/app/include/zmk/hog.h b/zmk/app/include/zmk/hog.h new file mode 100644 index 00000000..a7dda515 --- /dev/null +++ b/zmk/app/include/zmk/hog.h @@ -0,0 +1,15 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +int zmk_hog_init(); + +int zmk_hog_send_keypad_report(struct zmk_hid_keypad_report_body *body); +int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body); diff --git a/zmk/app/include/zmk/keymap.h b/zmk/app/include/zmk/keymap.h new file mode 100644 index 00000000..b8f49694 --- /dev/null +++ b/zmk/app/include/zmk/keymap.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +bool zmk_keymap_layer_active(u8_t layer); +int zmk_keymap_layer_activate(u8_t layer); +int zmk_keymap_layer_deactivate(u8_t layer); +int zmk_keymap_layer_toggle(u8_t layer); + +int zmk_keymap_position_state_changed(u32_t position, bool pressed, s64_t timestamp); diff --git a/zmk/app/include/zmk/keys.h b/zmk/app/include/zmk/keys.h new file mode 100644 index 00000000..af474b1f --- /dev/null +++ b/zmk/app/include/zmk/keys.h @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +typedef u32_t zmk_key; +typedef u8_t zmk_action; +typedef u8_t zmk_mod; +typedef u8_t zmk_mod_flags; + +struct zmk_key_event { + u32_t column; + u32_t row; + zmk_key key; + bool pressed; +}; \ No newline at end of file diff --git a/zmk/app/include/zmk/kscan.h b/zmk/app/include/zmk/kscan.h new file mode 100644 index 00000000..33526008 --- /dev/null +++ b/zmk/app/include/zmk/kscan.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_kscan_init(char *name); diff --git a/zmk/app/include/zmk/matrix.h b/zmk/app/include/zmk/matrix.h new file mode 100644 index 00000000..b3e2323b --- /dev/null +++ b/zmk/app/include/zmk/matrix.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +#define ZMK_MATRIX_NODE_ID DT_CHOSEN(zmk_kscan) + +#if DT_HAS_CHOSEN(zmk_matrix_transform) + +#define ZMK_KEYMAP_TRANSFORM_NODE DT_CHOSEN(zmk_matrix_transform) +#define ZMK_KEYMAP_LEN DT_PROP_LEN(ZMK_KEYMAP_TRANSFORM_NODE, map) + +#define ZMK_MATRIX_ROWS DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, rows) +#define ZMK_MATRIX_COLS DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, columns) + +#else /* DT_HAS_CHOSEN(zmk_matrix_transform) */ + +#if DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID, row_gpios) +#define ZMK_MATRIX_ROWS DT_PROP_LEN(ZMK_MATRIX_NODE_ID, row_gpios) +#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID, col_gpios) +#elif DT_NODE_HAS_PROP(ZMK_MATRIX_NODE_ID, input_gpios) +#define ZMK_MATRIX_ROWS 1 +#define ZMK_MATRIX_COLS DT_PROP_LEN(ZMK_MATRIX_NODE_ID, input_gpios) +#else +#define ZMK_MATRIX_ROWS DT_PROP(ZMK_MATRIX_NODE_ID, rows) +#define ZMK_MATRIX_COLS DT_PROP(ZMK_MATRIX_NODE_ID, columns) +#endif + +#define ZMK_KEYMAP_LEN (ZMK_MATRIX_COLS * ZMK_MATRIX_ROWS) + +#endif /* !DT_HAS_CHOSEN(zmk_matrix_transform) */ \ No newline at end of file diff --git a/zmk/app/include/zmk/matrix_transform.h b/zmk/app/include/zmk/matrix_transform.h new file mode 100644 index 00000000..29c2afcd --- /dev/null +++ b/zmk/app/include/zmk/matrix_transform.h @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +u32_t zmk_matrix_transform_row_column_to_position(u32_t row, u32_t column); \ No newline at end of file diff --git a/zmk/app/include/zmk/rgb_underglow.h b/zmk/app/include/zmk/rgb_underglow.h new file mode 100644 index 00000000..94cc32cc --- /dev/null +++ b/zmk/app/include/zmk/rgb_underglow.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_rgb_underglow_toggle(); +int zmk_rgb_underglow_cycle_effect(int direction); +int zmk_rgb_underglow_change_hue(int direction); +int zmk_rgb_underglow_change_sat(int direction); +int zmk_rgb_underglow_change_brt(int direction); +int zmk_rgb_underglow_change_spd(int direction); diff --git a/zmk/app/include/zmk/sensors.h b/zmk/app/include/zmk/sensors.h new file mode 100644 index 00000000..63dcade0 --- /dev/null +++ b/zmk/app/include/zmk/sensors.h @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#define ZMK_KEYMAP_SENSORS_NODE DT_INST(0, zmk_keymap_sensors) +#define ZMK_KEYMAP_HAS_SENSORS DT_NODE_EXISTS(ZMK_KEYMAP_SENSORS_NODE) +#define ZMK_KEYMAP_SENSORS_LEN DT_PROP_LEN(ZMK_KEYMAP_SENSORS_NODE, sensors) +#define ZMK_KEYMAP_SENSORS_BY_IDX(idx) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_SENSORS_NODE, sensors, idx) \ No newline at end of file diff --git a/zmk/app/include/zmk/split/bluetooth/service.h b/zmk/app/include/zmk/split/bluetooth/service.h new file mode 100644 index 00000000..c2be512f --- /dev/null +++ b/zmk/app/include/zmk/split/bluetooth/service.h @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +int zmk_split_bt_position_pressed(u8_t position); +int zmk_split_bt_position_released(u8_t position); \ No newline at end of file diff --git a/zmk/app/include/zmk/split/bluetooth/uuid.h b/zmk/app/include/zmk/split/bluetooth/uuid.h new file mode 100644 index 00000000..a31884d9 --- /dev/null +++ b/zmk/app/include/zmk/split/bluetooth/uuid.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include + +#ifndef BT_UUID_NUM_OF_DIGITALS +#define BT_UUID_NUM_OF_DIGITALS BT_UUID_DECLARE_16(0x2909) +#endif + +#define ZMK_BT_SPLIT_UUID(num) BT_UUID_128_ENCODE(num, 0x0096, 0x7107, 0xc967, 0xc5cfb1c2482a) +#define ZMK_SPLIT_BT_SERVICE_UUID ZMK_BT_SPLIT_UUID(0x00000000) +#define ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000001) diff --git a/zmk/app/include/zmk/usb.h b/zmk/app/include/zmk/usb.h new file mode 100644 index 00000000..30461de2 --- /dev/null +++ b/zmk/app/include/zmk/usb.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#pragma once + +#include +#include + +#include +#include + +enum zmk_usb_conn_state { + ZMK_USB_CONN_NONE, + ZMK_USB_CONN_POWERED, + ZMK_USB_CONN_HID, +}; + +enum usb_dc_status_code zmk_usb_get_status(); +enum zmk_usb_conn_state zmk_usb_get_conn_state(); + +static inline bool zmk_usb_is_powered() { return zmk_usb_get_conn_state() != ZMK_USB_CONN_NONE; } +static inline bool zmk_usb_is_hid_ready() { return zmk_usb_get_conn_state() == ZMK_USB_CONN_HID; } + +#ifdef CONFIG_ZMK_USB +int zmk_usb_hid_send_report(const u8_t *report, size_t len); +#endif /* CONFIG_ZMK_USB */ \ No newline at end of file diff --git a/zmk/app/prj.conf b/zmk/app/prj.conf new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/run-test.sh b/zmk/app/run-test.sh new file mode 100644 index 00000000..dd8c8eed --- /dev/null +++ b/zmk/app/run-test.sh @@ -0,0 +1,41 @@ +#!/bin/sh +# +# Copyright (c) 2020 The ZMK Contributors +# +# SPDX-License-Identifier: MIT +# + +if [ -z "$1" ]; then + echo "Usage: ./run-test.sh " + exit 1 +elif [ "$1" = "all" ]; then + echo "" > ./build/tests/pass-fail.log + find tests -name native_posix.keymap -exec dirname \{\} \; | xargs -l -P 4 ./run-test.sh + err=$? + sort -k2 ./build/tests/pass-fail.log + exit $err +fi + +testcase="$1" +echo "Running $testcase:" + +west build -d build/$testcase -b native_posix -- -DZMK_CONFIG=$testcase > /dev/null 2>&1 +if [ $? -gt 0 ]; then + echo "FAIL: $testcase did not build" >> ./build/tests/pass-fail.log + exit 1 +else + ./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log + diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log + if [ $? -gt 0 ]; then + if [ -f $testcase/pending ]; then + echo "PEND: $testcase" >> ./build/tests/pass-fail.log + exit 0 + else + echo "FAIL: $testcase" >> ./build/tests/pass-fail.log + exit 1 + fi + else + echo "PASS: $testcase" >> ./build/tests/pass-fail.log + exit 0 + fi +fi \ No newline at end of file diff --git a/zmk/app/src/battery.c b/zmk/app/src/battery.c new file mode 100644 index 00000000..9496570c --- /dev/null +++ b/zmk/app/src/battery.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct device *battery; + +static int zmk_battery_update(struct device *battery) { + struct sensor_value state_of_charge; + + int rc = sensor_sample_fetch_chan(battery, SENSOR_CHAN_GAUGE_STATE_OF_CHARGE); + + if (rc != 0) { + LOG_DBG("Failed to fetch battery values: %d", rc); + return rc; + } + + rc = sensor_channel_get(battery, SENSOR_CHAN_GAUGE_STATE_OF_CHARGE, &state_of_charge); + + if (rc != 0) { + LOG_DBG("Failed to get battery state of charge: %d", rc); + return rc; + } + + LOG_DBG("Setting BAS GATT battery level to %d.", state_of_charge.val1); + + return bt_gatt_bas_set_battery_level(state_of_charge.val1); +} + +static void zmk_battery_work(struct k_work *work) { + int rc = zmk_battery_update(battery); + + if (rc != 0) { + LOG_DBG("Failed to update battery value: %d.", rc); + } +} + +K_WORK_DEFINE(battery_work, zmk_battery_work); + +static void zmk_battery_timer(struct k_timer *timer) { k_work_submit(&battery_work); } + +K_TIMER_DEFINE(battery_timer, zmk_battery_timer, NULL); + +static int zmk_battery_init(struct device *_arg) { + battery = device_get_binding("BATTERY"); + + if (battery == NULL) { + LOG_DBG("No battery device labelled BATTERY found."); + return -ENODEV; + } + + int rc = zmk_battery_update(battery); + + if (rc != 0) { + LOG_DBG("Failed to update battery value: %d.", rc); + return rc; + } + + k_timer_start(&battery_timer, K_MINUTES(1), K_MINUTES(1)); + + return 0; +} + +SYS_INIT(zmk_battery_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/zmk/app/src/behaviors/behavior_bt.c b/zmk/app/src/behaviors/behavior_bt.c new file mode 100644 index 00000000..066c4371 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_bt.c @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_bluetooth + +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + switch (binding->param1) { + case BT_CLR_CMD: + return zmk_ble_clear_bonds(); + case BT_NXT_CMD: + return zmk_ble_prof_next(); + case BT_PRV_CMD: + return zmk_ble_prof_prev(); + case BT_SEL_CMD: + return zmk_ble_prof_select(binding->param2); + default: + LOG_ERR("Unknown BT command: %d", binding->param1); + } + + return -ENOTSUP; +} + +static int behavior_bt_init(struct device *dev) { return 0; }; + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static const struct behavior_driver_api behavior_bt_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +DEVICE_AND_API_INIT(behavior_bt, DT_INST_LABEL(0), behavior_bt_init, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_bt_driver_api); diff --git a/zmk/app/src/behaviors/behavior_ext_power.c b/zmk/app/src/behaviors/behavior_ext_power.c new file mode 100644 index 00000000..825f9834 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_ext_power.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_ext_power + +#include +#include +#include +#include + +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct device *ext_power = device_get_binding("EXT_POWER"); + if (ext_power == NULL) { + LOG_ERR("Unable to retrieve ext_power device: %d", binding->param1); + return -EIO; + } + + switch (binding->param1) { + case EXT_POWER_OFF_CMD: + return ext_power_disable(ext_power); + case EXT_POWER_ON_CMD: + return ext_power_enable(ext_power); + case EXT_POWER_TOGGLE_CMD: + if (ext_power_get(ext_power) > 0) + return ext_power_disable(ext_power); + else + return ext_power_enable(ext_power); + default: + LOG_ERR("Unknown ext_power command: %d", binding->param1); + } + + return -ENOTSUP; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static int behavior_ext_power_init(struct device *dev) { return 0; }; + +static const struct behavior_driver_api behavior_ext_power_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +DEVICE_AND_API_INIT(behavior_ext_power, DT_INST_LABEL(0), behavior_ext_power_init, NULL, NULL, + APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY, &behavior_ext_power_driver_api); diff --git a/zmk/app/src/behaviors/behavior_hold_tap.c b/zmk/app/src/behaviors/behavior_hold_tap.c new file mode 100644 index 00000000..1dc665dd --- /dev/null +++ b/zmk/app/src/behaviors/behavior_hold_tap.c @@ -0,0 +1,522 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_hold_tap + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#if DT_NODE_EXISTS(DT_DRV_INST(0)) + +#define ZMK_BHV_HOLD_TAP_MAX_HELD 10 +#define ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS 40 + +// increase if you have keyboard with more keys. +#define ZMK_BHV_HOLD_TAP_POSITION_NOT_USED 9999 + +enum flavor { + ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED = 0, + ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED = 1, + ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED = 2, +}; + +struct behavior_hold_tap_behaviors { + struct zmk_behavior_binding tap; + struct zmk_behavior_binding hold; +}; + +struct behavior_hold_tap_config { + int tapping_term_ms; + struct behavior_hold_tap_behaviors *behaviors; + enum flavor flavor; +}; + +// this data is specific for each hold-tap +struct active_hold_tap { + s32_t position; + // todo: move these params into the config->behaviors->tap and + u32_t param_hold; + u32_t param_tap; + s64_t timestamp; + bool is_decided; + bool is_hold; + const struct behavior_hold_tap_config *config; + struct k_delayed_work work; + bool work_is_cancelled; +}; + +// The undecided hold tap is the hold tap that needs to be decided before +// other keypress events can be released. While the undecided_hold_tap is +// not NULL, most events are captured in captured_events. +// After the hold_tap is decided, it will stay in the active_hold_taps until +// its key-up has been processed and the delayed work is cleaned up. +struct active_hold_tap *undecided_hold_tap = NULL; +struct active_hold_tap active_hold_taps[ZMK_BHV_HOLD_TAP_MAX_HELD] = {}; +// We capture most position_state_changed events and some modifiers_state_changed events. +const struct zmk_event_header *captured_events[ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS] = {}; + +static int capture_event(const struct zmk_event_header *event) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + if (captured_events[i] == NULL) { + captured_events[i] = event; + return 0; + } + } + return -ENOMEM; +} + +static struct position_state_changed *find_captured_keydown_event(u32_t position) { + struct position_state_changed *last_match = NULL; + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + const struct zmk_event_header *eh = captured_events[i]; + if (eh == NULL) { + return last_match; + } + if (!is_position_state_changed(eh)) { + continue; + } + struct position_state_changed *position_event = cast_position_state_changed(eh); + if (position_event->position == position && position_event->state) { + last_match = position_event; + } + } + return last_match; +} + +const struct zmk_listener zmk_listener_behavior_hold_tap; + +static void release_captured_events() { + if (undecided_hold_tap != NULL) { + return; + } + + // We use a trick to prevent copying the captured_events array. + // + // Events for different mod-tap instances are separated by a NULL pointer. + // + // The first event popped will never be catched by the next active hold-tap + // because to start capturing a mod-tap-key-down event must first completely + // go through the events queue. + // + // Example of this release process; + // [mt2_down, k1_down, k1_up, mt2_up, null, ...] + // ^ + // mt2_down position event isn't captured because no hold-tap is active. + // mt2_down behavior event is handled, now we have an undecided hold-tap + // [null, k1_down, k1_up, mt2_up, null, ...] + // ^ + // k1_down is captured by the mt2 mod-tap + // !note that searches for find_captured_keydown_event by the mt2 behavior will stop at the + // first null encountered [mt1_down, null, k1_up, mt2_up, null, ...] + // ^ + // k1_up event is captured by the new hold-tap: + // [k1_down, k1_up, null, mt2_up, null, ...] + // ^ + // mt2_up event is not captured but causes release of mt2 behavior + // [k1_down, k1_up, null, null, null, ...] + // now mt2 will start releasing it's own captured positions. + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_CAPTURED_EVENTS; i++) { + const struct zmk_event_header *captured_event = captured_events[i]; + if (captured_event == NULL) { + return; + } + captured_events[i] = NULL; + if (undecided_hold_tap != NULL) { + k_msleep(10); + } + if (is_position_state_changed(captured_event)) { + struct position_state_changed *position_event = + cast_position_state_changed(captured_event); + LOG_DBG("Releasing key position event for position %d %s", position_event->position, + (position_event->state ? "pressed" : "released")); + } else { + struct keycode_state_changed *modifier_event = + cast_keycode_state_changed(captured_event); + LOG_DBG("Releasing mods changed event 0x%02X %s", modifier_event->keycode, + (modifier_event->state ? "pressed" : "released")); + } + ZMK_EVENT_RAISE_AT(captured_event, behavior_hold_tap); + } +} + +static struct active_hold_tap *find_hold_tap(u32_t position) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + if (active_hold_taps[i].position == position) { + return &active_hold_taps[i]; + } + } + return NULL; +} + +static struct active_hold_tap *store_hold_tap(u32_t position, u32_t param_hold, u32_t param_tap, + s64_t timestamp, + const struct behavior_hold_tap_config *config) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + if (active_hold_taps[i].position != ZMK_BHV_HOLD_TAP_POSITION_NOT_USED) { + continue; + } + active_hold_taps[i].position = position; + active_hold_taps[i].is_decided = false; + active_hold_taps[i].is_hold = false; + active_hold_taps[i].config = config; + active_hold_taps[i].param_hold = param_hold; + active_hold_taps[i].param_tap = param_tap; + active_hold_taps[i].timestamp = timestamp; + return &active_hold_taps[i]; + } + return NULL; +} + +static void clear_hold_tap(struct active_hold_tap *hold_tap) { + hold_tap->position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; + hold_tap->is_decided = false; + hold_tap->is_hold = false; + hold_tap->work_is_cancelled = false; +} + +enum decision_moment { + HT_KEY_UP = 0, + HT_OTHER_KEY_DOWN = 1, + HT_OTHER_KEY_UP = 2, + HT_TIMER_EVENT = 3, +}; + +static void decide_balanced(struct active_hold_tap *hold_tap, enum decision_moment event) { + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_OTHER_KEY_UP: + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: + return; + } +} + +static void decide_tap_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) { + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: + return; + } +} + +static void decide_hold_preferred(struct active_hold_tap *hold_tap, enum decision_moment event) { + switch (event) { + case HT_KEY_UP: + hold_tap->is_hold = 0; + hold_tap->is_decided = true; + break; + case HT_OTHER_KEY_DOWN: + case HT_TIMER_EVENT: + hold_tap->is_hold = 1; + hold_tap->is_decided = true; + break; + default: + return; + } +} + +static inline char *flavor_str(enum flavor flavor) { + switch (flavor) { + case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + return "hold-preferred"; + case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: + return "balanced"; + case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: + return "tap-preferred"; + } + return "UNKNOWN FLAVOR"; +} + +static void decide_hold_tap(struct active_hold_tap *hold_tap, enum decision_moment event_type) { + if (hold_tap->is_decided) { + return; + } + + if (hold_tap != undecided_hold_tap) { + LOG_DBG("ERROR found undecided tap hold that is not the active tap hold"); + return; + } + + switch (hold_tap->config->flavor) { + case ZMK_BHV_HOLD_TAP_FLAVOR_HOLD_PREFERRED: + decide_hold_preferred(hold_tap, event_type); + case ZMK_BHV_HOLD_TAP_FLAVOR_BALANCED: + decide_balanced(hold_tap, event_type); + case ZMK_BHV_HOLD_TAP_FLAVOR_TAP_PREFERRED: + decide_tap_preferred(hold_tap, event_type); + } + + if (!hold_tap->is_decided) { + return; + } + + LOG_DBG("%d decided %s (%s event %d)", hold_tap->position, hold_tap->is_hold ? "hold" : "tap", + flavor_str(hold_tap->config->flavor), event_type); + undecided_hold_tap = NULL; + + struct zmk_behavior_binding_event event = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + + struct zmk_behavior_binding binding; + if (hold_tap->is_hold) { + binding.behavior_dev = hold_tap->config->behaviors->hold.behavior_dev; + binding.param1 = hold_tap->param_hold; + binding.param2 = 0; + } else { + binding.behavior_dev = hold_tap->config->behaviors->tap.behavior_dev; + binding.param1 = hold_tap->param_tap; + binding.param2 = 0; + } + behavior_keymap_binding_pressed(&binding, event); + release_captured_events(); +} + +static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_hold_tap_config *cfg = dev->config_info; + + if (undecided_hold_tap != NULL) { + LOG_DBG("ERROR another hold-tap behavior is undecided."); + // if this happens, make sure the behavior events occur AFTER other position events. + return 0; + } + + struct active_hold_tap *hold_tap = + store_hold_tap(event.position, binding->param1, binding->param2, event.timestamp, cfg); + if (hold_tap == NULL) { + LOG_ERR("unable to store hold-tap info, did you press more than %d hold-taps?", + ZMK_BHV_HOLD_TAP_MAX_HELD); + return 0; + } + + LOG_DBG("%d new undecided hold_tap", event.position); + undecided_hold_tap = hold_tap; + + // if this behavior was queued we have to adjust the timer to only + // wait for the remaining time. + s32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get(); + if (tapping_term_ms_left > 0) { + k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left)); + } + + return 0; +} + +static int on_hold_tap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct active_hold_tap *hold_tap = find_hold_tap(event.position); + if (hold_tap == NULL) { + LOG_ERR("ACTIVE_HOLD_TAP_CLEANED_UP_TOO_EARLY"); + return 0; + } + + // If these events were queued, the timer event may be queued too late or not at all. + // We insert a timer event before the TH_KEY_UP event to verify. + int work_cancel_result = k_delayed_work_cancel(&hold_tap->work); + if (event.timestamp > (hold_tap->timestamp + hold_tap->config->tapping_term_ms)) { + decide_hold_tap(hold_tap, HT_TIMER_EVENT); + } + + decide_hold_tap(hold_tap, HT_KEY_UP); + + // todo: set up the binding and data items inside of the active_hold_tap struct + struct zmk_behavior_binding_event sub_behavior_data = { + .position = hold_tap->position, + .timestamp = hold_tap->timestamp, + }; + + struct zmk_behavior_binding sub_behavior_binding; + if (hold_tap->is_hold) { + sub_behavior_binding.behavior_dev = hold_tap->config->behaviors->hold.behavior_dev; + sub_behavior_binding.param1 = hold_tap->param_hold; + sub_behavior_binding.param2 = 0; + } else { + sub_behavior_binding.behavior_dev = hold_tap->config->behaviors->tap.behavior_dev; + sub_behavior_binding.param1 = hold_tap->param_tap; + sub_behavior_binding.param2 = 0; + } + behavior_keymap_binding_released(&sub_behavior_binding, sub_behavior_data); + + if (work_cancel_result == -EINPROGRESS) { + // let the timer handler clean up + // if we'd clear now, the timer may call back for an uninitialized active_hold_tap. + LOG_DBG("%d hold-tap timer work in event queue", event.position); + hold_tap->work_is_cancelled = true; + } else { + LOG_DBG("%d cleaning up hold-tap", event.position); + clear_hold_tap(hold_tap); + } + + return 0; +} + +static const struct behavior_driver_api behavior_hold_tap_driver_api = { + .binding_pressed = on_hold_tap_binding_pressed, + .binding_released = on_hold_tap_binding_released, +}; + +static int position_state_changed_listener(const struct zmk_event_header *eh) { + struct position_state_changed *ev = cast_position_state_changed(eh); + + if (undecided_hold_tap == NULL) { + LOG_DBG("%d bubble (no undecided hold_tap active)", ev->position); + return 0; + } + + if (undecided_hold_tap->position == ev->position) { + if (ev->state) { // keydown + LOG_ERR("hold-tap listener should be called before before most other listeners!"); + return 0; + } else { // keyup + LOG_DBG("%d bubble undecided hold-tap keyrelease event", undecided_hold_tap->position); + return 0; + } + } + + // If these events were queued, the timer event may be queued too late or not at all. + // We make a timer decision before the other key events are handled if the timer would + // have run out. + if (ev->timestamp > + (undecided_hold_tap->timestamp + undecided_hold_tap->config->tapping_term_ms)) { + decide_hold_tap(undecided_hold_tap, HT_TIMER_EVENT); + } + + if (!ev->state && find_captured_keydown_event(ev->position) == NULL) { + // no keydown event has been captured, let it bubble. + // we'll catch modifiers later in modifier_state_changed_listener + LOG_DBG("%d bubbling %d %s event", undecided_hold_tap->position, ev->position, + ev->state ? "down" : "up"); + return 0; + } + + LOG_DBG("%d capturing %d %s event", undecided_hold_tap->position, ev->position, + ev->state ? "down" : "up"); + capture_event(eh); + decide_hold_tap(undecided_hold_tap, ev->state ? HT_OTHER_KEY_DOWN : HT_OTHER_KEY_UP); + return ZMK_EV_EVENT_CAPTURED; +} + +static inline bool only_mods(struct keycode_state_changed *ev) { + return ev->usage_page == HID_USAGE_KEY && ev->keycode >= HID_USAGE_KEY_KEYBOARD_LEFTCONTROL && + ev->keycode <= HID_USAGE_KEY_KEYBOARD_RIGHT_GUI; +} + +static int keycode_state_changed_listener(const struct zmk_event_header *eh) { + // we want to catch layer-up events too... how? + struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + + if (undecided_hold_tap == NULL) { + // LOG_DBG("0x%02X bubble (no undecided hold_tap active)", ev->keycode); + return 0; + } + + if (!only_mods(ev)) { + // LOG_DBG("0x%02X bubble (not a mod)", ev->keycode); + return 0; + } + + // only key-up events will bubble through position_state_changed_listener + // if a undecided_hold_tap is active. + LOG_DBG("%d capturing 0x%02X %s event", undecided_hold_tap->position, ev->keycode, + ev->state ? "down" : "up"); + capture_event(eh); + return ZMK_EV_EVENT_CAPTURED; +} + +int behavior_hold_tap_listener(const struct zmk_event_header *eh) { + if (is_position_state_changed(eh)) { + return position_state_changed_listener(eh); + } else if (is_keycode_state_changed(eh)) { + return keycode_state_changed_listener(eh); + } + return 0; +} + +ZMK_LISTENER(behavior_hold_tap, behavior_hold_tap_listener); +ZMK_SUBSCRIPTION(behavior_hold_tap, position_state_changed); +// this should be modifiers_state_changed, but unfrotunately that's not implemented yet. +ZMK_SUBSCRIPTION(behavior_hold_tap, keycode_state_changed); + +void behavior_hold_tap_timer_work_handler(struct k_work *item) { + struct active_hold_tap *hold_tap = CONTAINER_OF(item, struct active_hold_tap, work); + + if (hold_tap->work_is_cancelled) { + clear_hold_tap(hold_tap); + } else { + decide_hold_tap(hold_tap, HT_TIMER_EVENT); + } +} + +static int behavior_hold_tap_init(struct device *dev) { + static bool init_first_run = true; + + if (init_first_run) { + for (int i = 0; i < ZMK_BHV_HOLD_TAP_MAX_HELD; i++) { + k_delayed_work_init(&active_hold_taps[i].work, behavior_hold_tap_timer_work_handler); + active_hold_taps[i].position = ZMK_BHV_HOLD_TAP_POSITION_NOT_USED; + } + } + init_first_run = false; + return 0; +} + +struct behavior_hold_tap_data {}; +static struct behavior_hold_tap_data behavior_hold_tap_data; + +/* todo: get rid of unused param1 and param2. */ +#define _TRANSFORM_ENTRY(idx, node) \ + { \ + .behavior_dev = DT_LABEL(DT_INST_PHANDLE_BY_IDX(node, bindings, idx)), \ + .param1 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param1), (0), \ + (DT_INST_PHA_BY_IDX(node, bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_INST_PHA_HAS_CELL_AT_IDX(node, bindings, idx, param2), (0), \ + (DT_INST_PHA_BY_IDX(node, bindings, idx, param2))), \ + }, + +#define KP_INST(n) \ + static struct behavior_hold_tap_behaviors behavior_hold_tap_behaviors_##n = { \ + .hold = _TRANSFORM_ENTRY(0, n).tap = _TRANSFORM_ENTRY(1, n)}; \ + static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \ + .behaviors = &behavior_hold_tap_behaviors_##n, \ + .tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \ + .flavor = DT_ENUM_IDX(DT_DRV_INST(n), flavor), \ + }; \ + DEVICE_AND_API_INIT(behavior_hold_tap_##n, DT_INST_LABEL(n), behavior_hold_tap_init, \ + &behavior_hold_tap_data, &behavior_hold_tap_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) + +#endif \ No newline at end of file diff --git a/zmk/app/src/behaviors/behavior_key_press.c b/zmk/app/src/behaviors/behavior_key_press.c new file mode 100644 index 00000000..bfcdbfc2 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_key_press.c @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_key_press + +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static int behavior_key_press_init(struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); + + return ZMK_EVENT_RAISE(keycode_state_changed_from_encoded(binding->param1, true)); +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d keycode 0x%02X", event.position, binding->param1); + + return ZMK_EVENT_RAISE(keycode_state_changed_from_encoded(binding->param1, false)); +} + +static const struct behavior_driver_api behavior_key_press_driver_api = { + .binding_pressed = on_keymap_binding_pressed, .binding_released = on_keymap_binding_released}; + +#define KP_INST(n) \ + DEVICE_AND_API_INIT(behavior_key_press_##n, DT_INST_LABEL(n), behavior_key_press_init, NULL, \ + NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_key_press_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) diff --git a/zmk/app/src/behaviors/behavior_momentary_layer.c b/zmk/app/src/behaviors/behavior_momentary_layer.c new file mode 100644 index 00000000..b1fb14b0 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_momentary_layer.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_momentary_layer + +#include +#include +#include + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_mo_config {}; +struct behavior_mo_data {}; + +static int behavior_mo_init(struct device *dev) { return 0; }; + +static int mo_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d layer %d", event.position, binding->param1); + return zmk_keymap_layer_activate(binding->param1); +} + +static int mo_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d layer %d", event.position, binding->param1); + return zmk_keymap_layer_deactivate(binding->param1); +} + +static const struct behavior_driver_api behavior_mo_driver_api = { + .binding_pressed = mo_keymap_binding_pressed, .binding_released = mo_keymap_binding_released}; + +static const struct behavior_mo_config behavior_mo_config = {}; + +static struct behavior_mo_data behavior_mo_data; + +DEVICE_AND_API_INIT(behavior_mo, DT_INST_LABEL(0), behavior_mo_init, &behavior_mo_data, + &behavior_mo_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_mo_driver_api); diff --git a/zmk/app/src/behaviors/behavior_none.c b/zmk/app/src/behaviors/behavior_none.c new file mode 100644 index 00000000..96ea9d5d --- /dev/null +++ b/zmk/app/src/behaviors/behavior_none.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_none + +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_none_config {}; +struct behavior_none_data {}; + +static int behavior_none_init(struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 0; +} + +static const struct behavior_driver_api behavior_none_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +static const struct behavior_none_config behavior_none_config = {}; + +static struct behavior_none_data behavior_none_data; + +DEVICE_AND_API_INIT(behavior_none, DT_INST_LABEL(0), behavior_none_init, &behavior_none_data, + &behavior_none_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_none_driver_api); \ No newline at end of file diff --git a/zmk/app/src/behaviors/behavior_outputs.c b/zmk/app/src/behaviors/behavior_outputs.c new file mode 100644 index 00000000..e5182bd4 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_outputs.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_outputs + +#include +#include +#include + +#include + +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + switch (binding->param1) { + case OUT_TOG: + return zmk_endpoints_toggle(); + case OUT_USB: + return zmk_endpoints_select(ZMK_ENDPOINT_USB); + case OUT_BLE: + return zmk_endpoints_select(ZMK_ENDPOINT_BLE); + default: + LOG_ERR("Unknown output command: %d", binding->param1); + } + + return -ENOTSUP; +} + +static int behavior_out_init(struct device *dev) { return 0; } + +static const struct behavior_driver_api behavior_outputs_driver_api = { + .binding_pressed = on_keymap_binding_pressed, +}; + +DEVICE_AND_API_INIT(behavior_out, DT_INST_LABEL(0), behavior_out_init, NULL, NULL, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_outputs_driver_api); diff --git a/zmk/app/src/behaviors/behavior_reset.c b/zmk/app/src/behaviors/behavior_reset.c new file mode 100644 index 00000000..d1233a51 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_reset.c @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_reset + +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_reset_config { + int type; +}; + +static int behavior_reset_init(struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + struct device *dev = device_get_binding(binding->behavior_dev); + const struct behavior_reset_config *cfg = dev->config_info; + + // TODO: Correct magic code for going into DFU? + // See + // https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/d6b28e66053eea467166f44875e3c7ec741cb471/src/main.c#L107 + sys_reboot(cfg->type); + return 0; +} + +static const struct behavior_driver_api behavior_reset_driver_api = { + .binding_pressed = on_keymap_binding_pressed, +}; + +#define RST_INST(n) \ + static const struct behavior_reset_config behavior_reset_config_##n = { \ + .type = DT_INST_PROP(n, type)}; \ + DEVICE_AND_API_INIT(behavior_reset_##n, DT_INST_LABEL(n), behavior_reset_init, NULL, \ + &behavior_reset_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_reset_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(RST_INST) \ No newline at end of file diff --git a/zmk/app/src/behaviors/behavior_rgb_underglow.c b/zmk/app/src/behaviors/behavior_rgb_underglow.c new file mode 100644 index 00000000..2ee6716a --- /dev/null +++ b/zmk/app/src/behaviors/behavior_rgb_underglow.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_rgb_underglow + +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static int behavior_rgb_underglow_init(struct device *dev) { return 0; } + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + switch (binding->param1) { + case RGB_TOG: + return zmk_rgb_underglow_toggle(); + case RGB_HUI: + return zmk_rgb_underglow_change_hue(1); + case RGB_HUD: + return zmk_rgb_underglow_change_hue(-1); + case RGB_SAI: + return zmk_rgb_underglow_change_sat(1); + case RGB_SAD: + return zmk_rgb_underglow_change_sat(-1); + case RGB_BRI: + return zmk_rgb_underglow_change_brt(1); + case RGB_BRD: + return zmk_rgb_underglow_change_brt(-1); + case RGB_SPI: + return zmk_rgb_underglow_change_spd(1); + case RGB_SPD: + return zmk_rgb_underglow_change_spd(-1); + case RGB_EFF: + return zmk_rgb_underglow_cycle_effect(1); + case RGB_EFR: + return zmk_rgb_underglow_cycle_effect(-1); + } + + return -ENOTSUP; +} + +static const struct behavior_driver_api behavior_rgb_underglow_driver_api = { + .binding_pressed = on_keymap_binding_pressed, +}; + +DEVICE_AND_API_INIT(behavior_rgb_underglow, DT_INST_LABEL(0), behavior_rgb_underglow_init, NULL, + NULL, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_rgb_underglow_driver_api); \ No newline at end of file diff --git a/zmk/app/src/behaviors/behavior_sensor_rotate_key_press.c b/zmk/app/src/behaviors/behavior_sensor_rotate_key_press.c new file mode 100644 index 00000000..d0a22961 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_sensor_rotate_key_press.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_sensor_rotate_key_press + +#include +#include +#include + +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static int behavior_sensor_rotate_key_press_init(struct device *dev) { return 0; }; + +static int on_sensor_binding_triggered(struct zmk_behavior_binding *binding, + struct device *sensor) { + struct sensor_value value; + int err; + u32_t keycode; + LOG_DBG("inc keycode 0x%02X dec keycode 0x%02X", binding->param1, binding->param2); + + err = sensor_channel_get(sensor, SENSOR_CHAN_ROTATION, &value); + + if (err) { + LOG_WRN("Failed to ge sensor rotation value: %d", err); + return err; + } + + switch (value.val1) { + case 1: + keycode = binding->param1; + break; + case -1: + keycode = binding->param2; + break; + default: + return -ENOTSUP; + } + + LOG_DBG("SEND %d", keycode); + + ZMK_EVENT_RAISE(keycode_state_changed_from_encoded(keycode, true)); + + // TODO: Better way to do this? + k_msleep(5); + + return ZMK_EVENT_RAISE(keycode_state_changed_from_encoded(keycode, false)); +} + +static const struct behavior_driver_api behavior_sensor_rotate_key_press_driver_api = { + .sensor_binding_triggered = on_sensor_binding_triggered}; + +#define KP_INST(n) \ + DEVICE_AND_API_INIT(behavior_sensor_rotate_key_press_##n, DT_INST_LABEL(n), \ + behavior_sensor_rotate_key_press_init, NULL, NULL, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \ + &behavior_sensor_rotate_key_press_driver_api); + +DT_INST_FOREACH_STATUS_OKAY(KP_INST) \ No newline at end of file diff --git a/zmk/app/src/behaviors/behavior_toggle_layer.c b/zmk/app/src/behaviors/behavior_toggle_layer.c new file mode 100644 index 00000000..b3c69614 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_toggle_layer.c @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_toggle_layer + +#include +#include +#include + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_tog_config {}; +struct behavior_tog_data {}; + +static int behavior_tog_init(struct device *dev) { return 0; }; + +static int tog_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d layer %d", event.position, binding->param1); + return zmk_keymap_layer_toggle(binding->param1); +} + +static int tog_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + LOG_DBG("position %d layer %d", event.position, binding->param1); + return 0; +} + +static const struct behavior_driver_api behavior_tog_driver_api = { + .binding_pressed = tog_keymap_binding_pressed, + .binding_released = tog_keymap_binding_released, +}; + +static const struct behavior_tog_config behavior_tog_config = {}; + +static struct behavior_tog_data behavior_tog_data; + +DEVICE_AND_API_INIT(behavior_tog, DT_INST_LABEL(0), behavior_tog_init, &behavior_tog_data, + &behavior_tog_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &behavior_tog_driver_api); diff --git a/zmk/app/src/behaviors/behavior_transparent.c b/zmk/app/src/behaviors/behavior_transparent.c new file mode 100644 index 00000000..cede3699 --- /dev/null +++ b/zmk/app/src/behaviors/behavior_transparent.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_behavior_transparent + +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct behavior_transparent_config {}; +struct behavior_transparent_data {}; + +static int behavior_transparent_init(struct device *dev) { return 0; }; + +static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 1; +} + +static int on_keymap_binding_released(struct zmk_behavior_binding *binding, + struct zmk_behavior_binding_event event) { + return 1; +} + +static const struct behavior_driver_api behavior_transparent_driver_api = { + .binding_pressed = on_keymap_binding_pressed, + .binding_released = on_keymap_binding_released, +}; + +static const struct behavior_transparent_config behavior_transparent_config = {}; + +static struct behavior_transparent_data behavior_transparent_data; + +DEVICE_AND_API_INIT(behavior_transparent, DT_INST_LABEL(0), behavior_transparent_init, + &behavior_transparent_data, &behavior_transparent_config, APPLICATION, + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_transparent_driver_api); \ No newline at end of file diff --git a/zmk/app/src/ble.c b/zmk/app/src/ble.c new file mode 100644 index 00000000..1ab61d0c --- /dev/null +++ b/zmk/app/src/ble.c @@ -0,0 +1,596 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#if IS_ENABLED(CONFIG_SETTINGS) + +#include + +#endif + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include +#include + +static struct bt_conn *auth_passkey_entry_conn; +static u8_t passkey_entries[6] = {0, 0, 0, 0, 0, 0}; +static u8_t passkey_digit = 0; + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) +#define PROFILE_COUNT (CONFIG_BT_MAX_PAIRED - 1) +#else +#define PROFILE_COUNT CONFIG_BT_MAX_PAIRED +#endif + +enum advertising_type { + ZMK_ADV_NONE, + ZMK_ADV_DIR, + ZMK_ADV_CONN, +} advertising_status; + +#define CURR_ADV(adv) (adv << 4) + +#define ZMK_ADV_CONN_NAME \ + BT_LE_ADV_PARAM(BT_LE_ADV_OPT_CONNECTABLE | BT_LE_ADV_OPT_ONE_TIME, BT_GAP_ADV_FAST_INT_MIN_2, \ + BT_GAP_ADV_FAST_INT_MAX_2, NULL) + +static struct zmk_ble_profile profiles[PROFILE_COUNT]; +static u8_t active_profile; + +#define DEVICE_NAME CONFIG_BT_DEVICE_NAME +#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) + +static const struct bt_data zmk_ble_ad[] = { +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), + BT_DATA_BYTES(BT_DATA_GAP_APPEARANCE, 0xC1, 0x03), +#endif + BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), + BT_DATA_BYTES(BT_DATA_UUID16_SOME, +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + 0x12, 0x18, /* HID Service */ +#endif + 0x0f, 0x18 /* Battery Service */ + ), +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + BT_DATA_BYTES(BT_DATA_UUID128_ALL, ZMK_SPLIT_BT_SERVICE_UUID) +#endif +}; + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) + +static bt_addr_le_t peripheral_addr; + +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) */ + +static void raise_profile_changed_event() { + struct ble_active_profile_changed *ev = new_ble_active_profile_changed(); + ev->index = active_profile; + ev->profile = &profiles[active_profile]; + + ZMK_EVENT_RAISE(ev); +} + +static void raise_profile_changed_event_callback(struct k_work *work) { + raise_profile_changed_event(); +} + +K_WORK_DEFINE(raise_profile_changed_event_work, raise_profile_changed_event_callback); + +static bool active_profile_is_open() { + return !bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY); +} + +void set_profile_address(u8_t index, const bt_addr_le_t *addr) { + char setting_name[15]; + char addr_str[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(addr, addr_str, sizeof(addr_str)); + + memcpy(&profiles[index].peer, addr, sizeof(bt_addr_le_t)); + sprintf(setting_name, "ble/profiles/%d", index); + LOG_DBG("Setting profile addr for %s to %s", log_strdup(setting_name), log_strdup(addr_str)); + settings_save_one(setting_name, &profiles[index], sizeof(struct zmk_ble_profile)); + raise_profile_changed_event(); +} + +bool zmk_ble_active_profile_is_connected() { + struct bt_conn *conn; + bt_addr_le_t *addr = zmk_ble_active_profile_addr(); + if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { + return false; + } else if ((conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr)) == NULL) { + return false; + } + + bt_conn_unref(conn); + + return true; +} + +#define CHECKED_ADV_STOP() \ + err = bt_le_adv_stop(); \ + advertising_status = ZMK_ADV_NONE; \ + if (err) { \ + LOG_ERR("Failed to stop advertising (err %d)", err); \ + return err; \ + } + +#define CHECKED_DIR_ADV() \ + addr = zmk_ble_active_profile_addr(); \ + conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); \ + if (conn != NULL) { /* TODO: Check status of connection */ \ + LOG_DBG("Skipping advertising, profile host is already connected"); \ + bt_conn_unref(conn); \ + return 0; \ + } \ + err = bt_le_adv_start(BT_LE_ADV_CONN_DIR_LOW_DUTY(addr), zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), \ + NULL, 0); \ + if (err) { \ + LOG_ERR("Advertising failed to start (err %d)", err); \ + return err; \ + } \ + advertising_status = ZMK_ADV_DIR; + +#define CHECKED_OPEN_ADV() \ + err = bt_le_adv_start(ZMK_ADV_CONN_NAME, zmk_ble_ad, ARRAY_SIZE(zmk_ble_ad), NULL, 0); \ + if (err) { \ + LOG_ERR("Advertising failed to start (err %d)", err); \ + return err; \ + } \ + advertising_status = ZMK_ADV_CONN; + +int update_advertising() { + int err = 0; + bt_addr_le_t *addr; + struct bt_conn *conn; + enum advertising_type desired_adv = ZMK_ADV_NONE; + + if (active_profile_is_open()) { + desired_adv = ZMK_ADV_CONN; + } else if (!zmk_ble_active_profile_is_connected()) { + desired_adv = ZMK_ADV_CONN; + // Need to fix directed advertising for privacy centrals. See + // https://github.com/zephyrproject-rtos/zephyr/pull/14984 char + // addr_str[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(zmk_ble_active_profile_addr(), addr_str, + // sizeof(addr_str)); + + // LOG_DBG("Directed advertising to %s", log_strdup(addr_str)); + // desired_adv = ZMK_ADV_DIR; + } + LOG_DBG("advertising from %d to %d", advertising_status, desired_adv); + + switch (desired_adv + CURR_ADV(advertising_status)) { + case ZMK_ADV_NONE + CURR_ADV(ZMK_ADV_DIR): + case ZMK_ADV_NONE + CURR_ADV(ZMK_ADV_CONN): + CHECKED_ADV_STOP(); + break; + case ZMK_ADV_DIR + CURR_ADV(ZMK_ADV_DIR): + case ZMK_ADV_DIR + CURR_ADV(ZMK_ADV_CONN): + CHECKED_ADV_STOP(); + CHECKED_DIR_ADV(); + break; + case ZMK_ADV_DIR + CURR_ADV(ZMK_ADV_NONE): + CHECKED_DIR_ADV(); + break; + case ZMK_ADV_CONN + CURR_ADV(ZMK_ADV_DIR): + CHECKED_ADV_STOP(); + CHECKED_OPEN_ADV(); + break; + case ZMK_ADV_CONN + CURR_ADV(ZMK_ADV_NONE): + CHECKED_OPEN_ADV(); + break; + } + + return 0; +}; + +static void update_advertising_callback(struct k_work *work) { update_advertising(); } + +K_WORK_DEFINE(update_advertising_work, update_advertising_callback); + +int zmk_ble_clear_bonds() { + LOG_DBG(""); + + if (bt_addr_le_cmp(&profiles[active_profile].peer, BT_ADDR_LE_ANY)) { + LOG_DBG("Unpairing!"); + bt_unpair(BT_ID_DEFAULT, &profiles[active_profile].peer); + set_profile_address(active_profile, BT_ADDR_LE_ANY); + } + + update_advertising(); + + return 0; +}; + +int zmk_ble_prof_select(u8_t index) { + LOG_DBG("profile %d", index); + if (active_profile == index) { + return 0; + } + + active_profile = index; + settings_save_one("ble/active_profile", &active_profile, sizeof(active_profile)); + + update_advertising(); + + raise_profile_changed_event(); + + return 0; +}; + +int zmk_ble_prof_next() { + LOG_DBG(""); + return zmk_ble_prof_select((active_profile + 1) % PROFILE_COUNT); +}; + +int zmk_ble_prof_prev() { + LOG_DBG(""); + return zmk_ble_prof_select((active_profile + PROFILE_COUNT - 1) % PROFILE_COUNT); +}; + +bt_addr_le_t *zmk_ble_active_profile_addr() { return &profiles[active_profile].peer; } + +char *zmk_ble_active_profile_name() { return profiles[active_profile].name; } + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) + +void zmk_ble_set_peripheral_addr(bt_addr_le_t *addr) { + memcpy(&peripheral_addr, addr, sizeof(bt_addr_le_t)); + settings_save_one("ble/peripheral_address", addr, sizeof(bt_addr_le_t)); +} + +#endif /* IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) */ + +#if IS_ENABLED(CONFIG_SETTINGS) + +static int ble_profiles_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + const char *next; + + LOG_DBG("Setting BLE value %s", log_strdup(name)); + + if (settings_name_steq(name, "profiles", &next) && next) { + char *endptr; + u8_t idx = strtoul(next, &endptr, 10); + if (*endptr != '\0') { + LOG_WRN("Invalid profile index: %s", log_strdup(next)); + return -EINVAL; + } + + if (len != sizeof(struct zmk_ble_profile)) { + LOG_ERR("Invalid profile size (got %d expected %d)", len, + sizeof(struct zmk_ble_profile)); + return -EINVAL; + } + + if (idx >= PROFILE_COUNT) { + LOG_WRN("Profile address for index %d is larger than max of %d", idx, PROFILE_COUNT); + return -EINVAL; + } + + int err = read_cb(cb_arg, &profiles[idx], sizeof(struct zmk_ble_profile)); + if (err <= 0) { + LOG_ERR("Failed to handle profile address from settings (err %d)", err); + return err; + } + + char addr_str[BT_ADDR_LE_STR_LEN]; + bt_addr_le_to_str(&profiles[idx].peer, addr_str, sizeof(addr_str)); + + LOG_DBG("Loaded %s address for profile %d", log_strdup(addr_str), idx); + } else if (settings_name_steq(name, "active_profile", &next) && !next) { + if (len != sizeof(active_profile)) { + return -EINVAL; + } + + int err = read_cb(cb_arg, &active_profile, sizeof(active_profile)); + if (err <= 0) { + LOG_ERR("Failed to handle active profile from settings (err %d)", err); + return err; + } + } +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL) + else if (settings_name_steq(name, "peripheral_address", &next) && !next) { + if (len != sizeof(bt_addr_le_t)) { + return -EINVAL; + } + + int err = read_cb(cb_arg, &peripheral_addr, sizeof(bt_addr_le_t)); + if (err <= 0) { + LOG_ERR("Failed to handle peripheral address from settings (err %d)", err); + return err; + } + } +#endif + + return 0; +}; + +struct settings_handler profiles_handler = {.name = "ble", .h_set = ble_profiles_handle_set}; +#endif /* IS_ENABLED(CONFIG_SETTINGS) */ + +static bool is_conn_active_profile(const struct bt_conn *conn) { + return bt_addr_le_cmp(bt_conn_get_dst(conn), &profiles[active_profile].peer) == 0; +} + +static void connected(struct bt_conn *conn, u8_t err) { + char addr[BT_ADDR_LE_STR_LEN]; + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + advertising_status = ZMK_ADV_NONE; + + if (err) { + LOG_WRN("Failed to connect to %s (%u)", log_strdup(addr), err); + update_advertising(); + return; + } + + LOG_DBG("Connected %s", log_strdup(addr)); + + bt_conn_le_param_update(conn, BT_LE_CONN_PARAM(0x0006, 0x000c, 30, 400)); + +#if IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + bt_conn_le_phy_update(conn, BT_CONN_LE_PHY_PARAM_2M); +#endif + + if (bt_conn_set_security(conn, BT_SECURITY_L2)) { + LOG_ERR("Failed to set security"); + } + + update_advertising(); + + if (is_conn_active_profile(conn)) { + LOG_DBG("Active profile connected"); + raise_profile_changed_event(); + } +} + +static void disconnected(struct bt_conn *conn, u8_t reason) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + LOG_DBG("Disconnected from %s (reason 0x%02x)", log_strdup(addr), reason); + + // We need to do this in a work callback, otherwise the advertising update will still see the + // connection for a profile as active, and not start advertising yet. + k_work_submit(&update_advertising_work); + + if (is_conn_active_profile(conn)) { + LOG_DBG("Active profile disconnected"); + k_work_submit(&raise_profile_changed_event_work); + } +} + +static void security_changed(struct bt_conn *conn, bt_security_t level, enum bt_security_err err) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (!err) { + LOG_DBG("Security changed: %s level %u", log_strdup(addr), level); + } else { + LOG_ERR("Security failed: %s level %u err %d", log_strdup(addr), level, err); + } +} + +static struct bt_conn_cb conn_callbacks = { + .connected = connected, + .disconnected = disconnected, + .security_changed = security_changed, +}; + +static void auth_passkey_display(struct bt_conn *conn, unsigned int passkey) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + LOG_DBG("Passkey for %s: %06u", log_strdup(addr), passkey); +} + +#ifdef CONFIG_ZMK_BLE_PASSKEY_ENTRY + +static void auth_passkey_entry(struct bt_conn *conn) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + LOG_DBG("Passkey entry requested for %s", log_strdup(addr)); + auth_passkey_entry_conn = bt_conn_ref(conn); +} + +#endif + +static void auth_cancel(struct bt_conn *conn) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (auth_passkey_entry_conn) { + bt_conn_unref(auth_passkey_entry_conn); + auth_passkey_entry_conn = NULL; + } + + passkey_digit = 0; + + LOG_DBG("Pairing cancelled: %s", log_strdup(addr)); +} + +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) +static enum bt_security_err auth_pairing_accept(struct bt_conn *conn, + const struct bt_conn_pairing_feat *const feat) { + struct bt_conn_info info; + bt_conn_get_info(conn, &info); + + LOG_DBG("role %d, open? %s", info.role, active_profile_is_open() ? "yes" : "no"); + if (info.role == BT_CONN_ROLE_SLAVE && !active_profile_is_open()) { + LOG_WRN("Rejecting pairing request to taken profile %d", active_profile); + return BT_SECURITY_ERR_PAIR_NOT_ALLOWED; + } + + return BT_SECURITY_ERR_SUCCESS; +}; +#endif /* !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) */ + +static void auth_pairing_complete(struct bt_conn *conn, bool bonded) { + struct bt_conn_info info; + char addr[BT_ADDR_LE_STR_LEN]; + const bt_addr_le_t *dst = bt_conn_get_dst(conn); + + bt_addr_le_to_str(dst, addr, sizeof(addr)); + bt_conn_get_info(conn, &info); + + if (info.role != BT_CONN_ROLE_SLAVE) { + LOG_DBG("SKIPPING FOR ROLE %d", info.role); + return; + } + +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + if (!active_profile_is_open()) { + LOG_ERR("Pairing completed but current profile is not open: %s", log_strdup(addr)); + bt_unpair(BT_ID_DEFAULT, dst); + return; + } +#endif /* !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) */ + + set_profile_address(active_profile, dst); + update_advertising(); +}; + +static struct bt_conn_auth_cb zmk_ble_auth_cb_display = { +#if !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) + .pairing_accept = auth_pairing_accept, +#endif /* !IS_ENABLED(CONFIG_ZMK_SPLIT_BLE_ROLE_PERIPHERAL) */ + .pairing_complete = auth_pairing_complete, +// .passkey_display = auth_passkey_display, + +#ifdef CONFIG_ZMK_BLE_PASSKEY_ENTRY + .passkey_entry = auth_passkey_entry, +#endif + .cancel = auth_cancel, +}; + +static void zmk_ble_ready(int err) { + LOG_DBG("ready? %d", err); + if (err) { + LOG_ERR("Bluetooth init failed (err %d)", err); + return; + } + + update_advertising(); +} + +static int zmk_ble_init(struct device *_arg) { + int err = bt_enable(NULL); + + if (err) { + LOG_ERR("BLUETOOTH FAILED (%d)", err); + return err; + } + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_subsys_init(); + + err = settings_register(&profiles_handler); + if (err) { + LOG_ERR("Failed to setup the profile settings handler (err %d)", err); + return err; + } + + settings_load(); + +#endif + +#if IS_ENABLED(CONFIG_ZMK_BLE_CLEAR_BONDS_ON_START) + LOG_WRN("Clearing all existing BLE bond information from the keyboard"); + + for (int i = 0; i < 10; i++) { + bt_unpair(i, NULL); + } + + for (int i = 0; i < PROFILE_COUNT; i++) { + char setting_name[15]; + sprintf(setting_name, "ble/profiles/%d", i); + + err = settings_delete(setting_name); + if (err) { + LOG_ERR("Failed to delete setting: %d", err); + } + } +#endif + + bt_conn_cb_register(&conn_callbacks); + bt_conn_auth_cb_register(&zmk_ble_auth_cb_display); + + zmk_ble_ready(0); + + return 0; +} + +int zmk_ble_unpair_all() { + int resp = 0; + for (int i = BT_ID_DEFAULT; i < CONFIG_BT_ID_MAX; i++) { + + int err = bt_unpair(BT_ID_DEFAULT, NULL); + if (err) { + resp = err; + LOG_ERR("Failed to unpair devices (err %d)", err); + } + } + + return resp; +}; + +bool zmk_ble_handle_key_user(struct zmk_key_event *key_event) { + zmk_key key = key_event->key; + + if (!auth_passkey_entry_conn) { + return true; + } + + if (key < NUMBER_1 || key > NUMBER_0) { + return true; + } + + u32_t val = (key == NUMBER_0) ? 0 : (key - NUMBER_1 + 1); + + passkey_entries[passkey_digit++] = val; + + if (passkey_digit == 6) { + u32_t passkey = 0; + for (int i = 5; i >= 0; i--) { + passkey = (passkey * 10) + val; + } + bt_conn_auth_passkey_entry(auth_passkey_entry_conn, passkey); + bt_conn_unref(auth_passkey_entry_conn); + auth_passkey_entry_conn = NULL; + } + + return false; +} + +SYS_INIT(zmk_ble_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); diff --git a/zmk/app/src/display.c b/zmk/app/src/display.c new file mode 100644 index 00000000..ecd19086 --- /dev/null +++ b/zmk/app/src/display.c @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include + +#define ZMK_DISPLAY_NAME CONFIG_LVGL_DISPLAY_DEV_NAME + +static struct device *display; + +static lv_obj_t *screen; + +int zmk_display_init() { + lv_obj_t *hello_world_label; + lv_obj_t *count_label; + + LOG_DBG(""); + + display = device_get_binding(ZMK_DISPLAY_NAME); + if (display == NULL) { + LOG_ERR("Failed to find display device"); + return -EINVAL; + } + + screen = lv_obj_create(NULL, NULL); + lv_scr_load(screen); + + hello_world_label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(hello_world_label, "ZMK v0.1.0"); + lv_obj_align(hello_world_label, NULL, LV_ALIGN_CENTER, 0, 0); + count_label = lv_label_create(lv_scr_act(), NULL); + lv_label_set_text(count_label, CONFIG_ZMK_KEYBOARD_NAME); + lv_obj_align(count_label, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0); + lv_task_handler(); + display_blanking_off(display); + + return 0; +} + +void zmk_display_task_handler() { + lv_tick_inc(10); + lv_task_handler(); + k_sleep(K_MSEC(10)); +} diff --git a/zmk/app/src/endpoints.c b/zmk/app/src/endpoints.c new file mode 100644 index 00000000..9a6967c6 --- /dev/null +++ b/zmk/app/src/endpoints.c @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define DEFAULT_ENDPOINT \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_BLE), (ZMK_ENDPOINT_BLE), (ZMK_ENDPOINT_USB)) + +static enum zmk_endpoint current_endpoint = DEFAULT_ENDPOINT; +static enum zmk_endpoint preferred_endpoint = + ZMK_ENDPOINT_USB; /* Used if multiple endpoints are ready */ + +static void update_current_endpoint(); + +int zmk_endpoints_select(enum zmk_endpoint endpoint) { + LOG_DBG("Selected endpoint %d", endpoint); + + if (preferred_endpoint == endpoint) { + return 0; + } + + preferred_endpoint = endpoint; + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_save_one("endpoints/preferred", &preferred_endpoint, sizeof(preferred_endpoint)); +#endif + + update_current_endpoint(); + + return 0; +} + +int zmk_endpoints_toggle() { + enum zmk_endpoint new_endpoint = + (preferred_endpoint == ZMK_ENDPOINT_USB) ? ZMK_ENDPOINT_BLE : ZMK_ENDPOINT_USB; + return zmk_endpoints_select(new_endpoint); +} + +static int send_keypad_report() { + struct zmk_hid_keypad_report *keypad_report = zmk_hid_get_keypad_report(); + + switch (current_endpoint) { +#if IS_ENABLED(CONFIG_ZMK_USB) + case ZMK_ENDPOINT_USB: { + int err = zmk_usb_hid_send_report((u8_t *)keypad_report, sizeof(*keypad_report)); + if (err) { + LOG_ERR("FAILED TO SEND OVER USB: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + +#if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_ENDPOINT_BLE: { + int err = zmk_hog_send_keypad_report(&keypad_report->body); + if (err) { + LOG_ERR("FAILED TO SEND OVER HOG: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ + + default: + LOG_ERR("Unsupported endpoint %d", current_endpoint); + return -ENOTSUP; + } +} + +static int send_consumer_report() { + struct zmk_hid_consumer_report *consumer_report = zmk_hid_get_consumer_report(); + + switch (current_endpoint) { +#if IS_ENABLED(CONFIG_ZMK_USB) + case ZMK_ENDPOINT_USB: { + int err = zmk_usb_hid_send_report((u8_t *)consumer_report, sizeof(*consumer_report)); + if (err) { + LOG_ERR("FAILED TO SEND OVER USB: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_USB) */ + +#if IS_ENABLED(CONFIG_ZMK_BLE) + case ZMK_ENDPOINT_BLE: { + int err = zmk_hog_send_consumer_report(&consumer_report->body); + if (err) { + LOG_ERR("FAILED TO SEND OVER HOG: %d", err); + } + return err; + } +#endif /* IS_ENABLED(CONFIG_ZMK_BLE) */ + + default: + LOG_ERR("Unsupported endpoint %d", current_endpoint); + return -ENOTSUP; + } +} + +int zmk_endpoints_send_report(u8_t usage_page) { + + LOG_DBG("usage page 0x%02X", usage_page); + switch (usage_page) { + case HID_USAGE_KEY: + return send_keypad_report(); + case HID_USAGE_CONSUMER: + return send_consumer_report(); + default: + LOG_ERR("Unsupported usage page %d", usage_page); + return -ENOTSUP; + } +} + +#if IS_ENABLED(CONFIG_SETTINGS) + +static int endpoints_handle_set(const char *name, size_t len, settings_read_cb read_cb, + void *cb_arg) { + LOG_DBG("Setting endpoint value %s", log_strdup(name)); + + if (settings_name_steq(name, "preferred", NULL)) { + if (len != sizeof(enum zmk_endpoint)) { + LOG_ERR("Invalid endpoint size (got %d expected %d)", len, sizeof(enum zmk_endpoint)); + return -EINVAL; + } + + int err = read_cb(cb_arg, &preferred_endpoint, sizeof(enum zmk_endpoint)); + if (err <= 0) { + LOG_ERR("Failed to read preferred endpoint from settings (err %d)", err); + return err; + } + + update_current_endpoint(); + } + + return 0; +} + +struct settings_handler endpoints_handler = {.name = "endpoints", .h_set = endpoints_handle_set}; +#endif /* IS_ENABLED(CONFIG_SETTINGS) */ + +static int zmk_endpoints_init(struct device *_arg) { +#if IS_ENABLED(CONFIG_SETTINGS) + settings_subsys_init(); + + int err = settings_register(&endpoints_handler); + if (err) { + LOG_ERR("Failed to register the endpoints settings handler (err %d)", err); + return err; + } + + settings_load(); +#endif + + return 0; +} + +static bool is_usb_ready() { +#if IS_ENABLED(CONFIG_ZMK_USB) + return zmk_usb_is_hid_ready(); +#else + return false; +#endif +} + +static bool is_ble_ready() { +#if IS_ENABLED(CONFIG_ZMK_BLE) + return zmk_ble_active_profile_is_connected(); +#else + return false; +#endif +} + +static enum zmk_endpoint get_selected_endpoint() { + if (is_ble_ready()) { + if (is_usb_ready()) { + LOG_DBG("Both endpoints are ready. Using %d", preferred_endpoint); + return preferred_endpoint; + } + + LOG_DBG("Only BLE is ready."); + return ZMK_ENDPOINT_BLE; + } + + if (is_usb_ready()) { + LOG_DBG("Only USB is ready."); + return ZMK_ENDPOINT_USB; + } + + LOG_DBG("No endpoints are ready."); + return DEFAULT_ENDPOINT; +} + +static void disconnect_current_endpoint() { + zmk_hid_keypad_clear(); + zmk_hid_consumer_clear(); + + zmk_endpoints_send_report(HID_USAGE_KEY); + zmk_endpoints_send_report(HID_USAGE_CONSUMER); +} + +static void update_current_endpoint() { + enum zmk_endpoint new_endpoint = get_selected_endpoint(); + + if (new_endpoint != current_endpoint) { + /* Cancel all current keypresses so keys don't stay held on the old endpoint. */ + disconnect_current_endpoint(); + + current_endpoint = new_endpoint; + LOG_INF("Endpoint changed: %d", current_endpoint); + } +} + +static int endpoint_listener(const struct zmk_event_header *eh) { + update_current_endpoint(); + return 0; +} + +ZMK_LISTENER(endpoint_listener, endpoint_listener); +#if IS_ENABLED(CONFIG_ZMK_USB) +ZMK_SUBSCRIPTION(endpoint_listener, usb_conn_state_changed); +#endif +#if IS_ENABLED(CONFIG_ZMK_BLE) +ZMK_SUBSCRIPTION(endpoint_listener, ble_active_profile_changed); +#endif + +SYS_INIT(zmk_endpoints_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/zmk/app/src/event_manager.c b/zmk/app/src/event_manager.c new file mode 100644 index 00000000..226f3ce8 --- /dev/null +++ b/zmk/app/src/event_manager.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include + +extern struct zmk_event_type *__event_type_start[]; +extern struct zmk_event_type *__event_type_end[]; + +extern struct zmk_event_subscription __event_subscriptions_start[]; +extern struct zmk_event_subscription __event_subscriptions_end[]; + +int zmk_event_manager_handle_from(struct zmk_event_header *event, u8_t start_index) { + int ret = 0; + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = start_index; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; + if (ev_sub->event_type == event->event) { + ret = ev_sub->listener->callback(event); + if (ret < 0) { + LOG_DBG("Listener returned an error: %d", ret); + goto release; + } else if (ret > 0) { + switch (ret) { + case ZMK_EV_EVENT_HANDLED: + LOG_DBG("Listener handled the event"); + ret = 0; + goto release; + case ZMK_EV_EVENT_CAPTURED: + LOG_DBG("Listener captured the event"); + event->last_listener_index = i; + // Listeners are expected to free events they capture + return 0; + } + } + } + } + +release: + k_free(event); + return ret; +} + +int zmk_event_manager_raise(struct zmk_event_header *event) { + return zmk_event_manager_handle_from(event, 0); +} + +int zmk_event_manager_raise_after(struct zmk_event_header *event, + const struct zmk_listener *listener) { + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = 0; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; + + if (ev_sub->event_type == event->event && ev_sub->listener == listener) { + return zmk_event_manager_handle_from(event, i + 1); + } + } + + LOG_WRN("Unable to find where to raise this after event"); + + return -EINVAL; +} + +int zmk_event_manager_raise_at(struct zmk_event_header *event, + const struct zmk_listener *listener) { + u8_t len = __event_subscriptions_end - __event_subscriptions_start; + for (int i = 0; i < len; i++) { + struct zmk_event_subscription *ev_sub = __event_subscriptions_start + i; + + if (ev_sub->event_type == event->event && ev_sub->listener == listener) { + return zmk_event_manager_handle_from(event, i); + } + } + + LOG_WRN("Unable to find where to raise this event"); + + return -EINVAL; +} + +int zmk_event_manager_release(struct zmk_event_header *event) { + return zmk_event_manager_handle_from(event, event->last_listener_index + 1); +} diff --git a/zmk/app/src/events/ble_active_profile_changed.c b/zmk/app/src/events/ble_active_profile_changed.c new file mode 100644 index 00000000..06988e23 --- /dev/null +++ b/zmk/app/src/events/ble_active_profile_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(ble_active_profile_changed); \ No newline at end of file diff --git a/zmk/app/src/events/keycode_state_changed.c b/zmk/app/src/events/keycode_state_changed.c new file mode 100644 index 00000000..9a1984a3 --- /dev/null +++ b/zmk/app/src/events/keycode_state_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(keycode_state_changed); diff --git a/zmk/app/src/events/modifiers_state_changed.c b/zmk/app/src/events/modifiers_state_changed.c new file mode 100644 index 00000000..8becd02f --- /dev/null +++ b/zmk/app/src/events/modifiers_state_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(modifiers_state_changed); \ No newline at end of file diff --git a/zmk/app/src/events/position_state_changed.c b/zmk/app/src/events/position_state_changed.c new file mode 100644 index 00000000..f8f1a268 --- /dev/null +++ b/zmk/app/src/events/position_state_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(position_state_changed); \ No newline at end of file diff --git a/zmk/app/src/events/sensor_event.c b/zmk/app/src/events/sensor_event.c new file mode 100644 index 00000000..c6b80cd6 --- /dev/null +++ b/zmk/app/src/events/sensor_event.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(sensor_event); \ No newline at end of file diff --git a/zmk/app/src/events/usb_conn_state_changed.c b/zmk/app/src/events/usb_conn_state_changed.c new file mode 100644 index 00000000..d845f6d7 --- /dev/null +++ b/zmk/app/src/events/usb_conn_state_changed.c @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +ZMK_EVENT_IMPL(usb_conn_state_changed); \ No newline at end of file diff --git a/zmk/app/src/ext_power_generic.c b/zmk/app/src/ext_power_generic.c new file mode 100644 index 00000000..48170304 --- /dev/null +++ b/zmk/app/src/ext_power_generic.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_ext_power_generic + +#include +#include +#include +#include + +#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +struct ext_power_generic_config { + const char *label; + const u8_t pin; + const u8_t flags; +}; + +struct ext_power_generic_data { + struct device *gpio; + bool status; +}; + +static int ext_power_generic_enable(struct device *dev) { + struct ext_power_generic_data *data = dev->driver_data; + const struct ext_power_generic_config *config = dev->config_info; + + if (gpio_pin_set(data->gpio, config->pin, 1)) { + LOG_WRN("Failed to set ext-power control pin"); + return -EIO; + } + data->status = true; + return 0; +} + +static int ext_power_generic_disable(struct device *dev) { + struct ext_power_generic_data *data = dev->driver_data; + const struct ext_power_generic_config *config = dev->config_info; + + if (gpio_pin_set(data->gpio, config->pin, 0)) { + LOG_WRN("Failed to clear ext-power control pin"); + return -EIO; + } + data->status = false; + return 0; +} + +static int ext_power_generic_get(struct device *dev) { + struct ext_power_generic_data *data = dev->driver_data; + return data->status; +} + +static int ext_power_generic_init(struct device *dev) { + struct ext_power_generic_data *data = dev->driver_data; + const struct ext_power_generic_config *config = dev->config_info; + + data->gpio = device_get_binding(config->label); + if (data->gpio == NULL) { + LOG_ERR("Failed to get ext-power control device"); + return -EINVAL; + } + + if (gpio_pin_configure(data->gpio, config->pin, config->flags | GPIO_OUTPUT)) { + LOG_ERR("Failed to configure ext-power control pin"); + return -EIO; + } + + return 0; +} + +static const struct ext_power_generic_config config = { + .label = DT_INST_GPIO_LABEL(0, control_gpios), + .pin = DT_INST_GPIO_PIN(0, control_gpios), + .flags = DT_INST_GPIO_FLAGS(0, control_gpios)}; + +static struct ext_power_generic_data data = {.status = false}; + +static const struct ext_power_api api = {.enable = ext_power_generic_enable, + .disable = ext_power_generic_disable, + .get = ext_power_generic_get}; + +DEVICE_AND_API_INIT(ext_power_generic, DT_INST_LABEL(0), ext_power_generic_init, &data, &config, + APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &api); + +#endif /* DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT) */ diff --git a/zmk/app/src/hid.c b/zmk/app/src/hid.c new file mode 100644 index 00000000..b84a693f --- /dev/null +++ b/zmk/app/src/hid.c @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include + +static struct zmk_hid_keypad_report kp_report = { + .report_id = 1, .body = {.modifiers = 0, ._reserved = 0, .keys = {0}}}; + +static struct zmk_hid_consumer_report consumer_report = {.report_id = 2, .body = {.keys = {0}}}; + +// Keep track of how often a modifier was pressed. +// Only release the modifier if the count is 0. +static int explicit_modifier_counts[8] = {0, 0, 0, 0, 0, 0, 0, 0}; +static zmk_mod_flags explicit_modifiers = 0; + +#define SET_MODIFIERS(mods) \ + { \ + kp_report.body.modifiers = mods; \ + LOG_DBG("Modifiers set to 0x%02X", kp_report.body.modifiers); \ + } + +int zmk_hid_register_mod(zmk_mod modifier) { + explicit_modifier_counts[modifier]++; + LOG_DBG("Modifier %d count %d", modifier, explicit_modifier_counts[modifier]); + WRITE_BIT(explicit_modifiers, modifier, true); + SET_MODIFIERS(explicit_modifiers); + return 0; +} + +int zmk_hid_unregister_mod(zmk_mod modifier) { + if (explicit_modifier_counts[modifier] <= 0) { + LOG_ERR("Tried to unregister modifier %d too often", modifier); + return -EINVAL; + } + explicit_modifier_counts[modifier]--; + LOG_DBG("Modifier %d count: %d", modifier, explicit_modifier_counts[modifier]); + if (explicit_modifier_counts[modifier] == 0) { + LOG_DBG("Modifier %d released", modifier); + WRITE_BIT(explicit_modifiers, modifier, false); + } + SET_MODIFIERS(explicit_modifiers); + return 0; +} + +#define TOGGLE_KEYPAD(match, val) \ + for (int idx = 0; idx < ZMK_HID_KEYPAD_NKRO_SIZE; idx++) { \ + if (kp_report.body.keys[idx] != match) { \ + continue; \ + } \ + kp_report.body.keys[idx] = val; \ + break; \ + } + +#define TOGGLE_CONSUMER(match, val) \ + for (int idx = 0; idx < ZMK_HID_CONSUMER_NKRO_SIZE; idx++) { \ + if (consumer_report.body.keys[idx] != match) { \ + continue; \ + } \ + consumer_report.body.keys[idx] = val; \ + break; \ + } + +int zmk_hid_implicit_modifiers_press(zmk_mod_flags implicit_modifiers) { + SET_MODIFIERS(explicit_modifiers | implicit_modifiers); + return 0; +} + +int zmk_hid_implicit_modifiers_release() { + SET_MODIFIERS(explicit_modifiers); + return 0; +} + +int zmk_hid_keypad_press(zmk_key code) { + if (code >= HID_USAGE_KEY_KEYBOARD_LEFTCONTROL && code <= HID_USAGE_KEY_KEYBOARD_RIGHT_GUI) { + return zmk_hid_register_mod(code - HID_USAGE_KEY_KEYBOARD_LEFTCONTROL); + } + TOGGLE_KEYPAD(0U, code); + return 0; +}; + +int zmk_hid_keypad_release(zmk_key code) { + if (code >= HID_USAGE_KEY_KEYBOARD_LEFTCONTROL && code <= HID_USAGE_KEY_KEYBOARD_RIGHT_GUI) { + return zmk_hid_unregister_mod(code - HID_USAGE_KEY_KEYBOARD_LEFTCONTROL); + } + TOGGLE_KEYPAD(code, 0U); + return 0; +}; + +void zmk_hid_keypad_clear() { memset(&kp_report.body, 0, sizeof(kp_report.body)); } + +int zmk_hid_consumer_press(zmk_key code) { + TOGGLE_CONSUMER(0U, code); + return 0; +}; + +int zmk_hid_consumer_release(zmk_key code) { + TOGGLE_CONSUMER(code, 0U); + return 0; +}; + +void zmk_hid_consumer_clear() { memset(&consumer_report.body, 0, sizeof(consumer_report.body)); } + +struct zmk_hid_keypad_report *zmk_hid_get_keypad_report() { + return &kp_report; +} + +struct zmk_hid_consumer_report *zmk_hid_get_consumer_report() { + return &consumer_report; +} diff --git a/zmk/app/src/hid_listener.c b/zmk/app/src/hid_listener.c new file mode 100644 index 00000000..5efb7987 --- /dev/null +++ b/zmk/app/src/hid_listener.c @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include +#include +#include + +static int hid_listener_keycode_pressed(u8_t usage_page, u32_t keycode, + zmk_mod_flags implicit_modifiers) { + int err; + LOG_DBG("usage_page 0x%02X keycode 0x%02X mods 0x%02X", usage_page, keycode, + implicit_modifiers); + switch (usage_page) { + case HID_USAGE_KEY: + err = zmk_hid_keypad_press(keycode); + if (err) { + LOG_ERR("Unable to press keycode"); + return err; + } + break; + case HID_USAGE_CONSUMER: + err = zmk_hid_consumer_press(keycode); + if (err) { + LOG_ERR("Unable to press keycode"); + return err; + } + break; + } + zmk_hid_implicit_modifiers_press(implicit_modifiers); + return zmk_endpoints_send_report(usage_page); +} + +static int hid_listener_keycode_released(u8_t usage_page, u32_t keycode, + zmk_mod_flags implicit_modifiers) { + int err; + LOG_DBG("usage_page 0x%02X keycode 0x%02X mods 0x%02X", usage_page, keycode, + implicit_modifiers); + switch (usage_page) { + case HID_USAGE_KEY: + err = zmk_hid_keypad_release(keycode); + if (err) { + LOG_ERR("Unable to release keycode"); + return err; + } + break; + case HID_USAGE_CONSUMER: + err = zmk_hid_consumer_release(keycode); + if (err) { + LOG_ERR("Unable to release keycode"); + return err; + } + } + // There is a minor issue with this code. + // If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released + // prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time. + // Solving this would require keeping track of which key's implicit modifiers are currently + // active and only releasing modifiers at that time. + zmk_hid_implicit_modifiers_release(); + return zmk_endpoints_send_report(usage_page); +} + +int hid_listener(const struct zmk_event_header *eh) { + if (is_keycode_state_changed(eh)) { + const struct keycode_state_changed *ev = cast_keycode_state_changed(eh); + if (ev->state) { + hid_listener_keycode_pressed(ev->usage_page, ev->keycode, ev->implicit_modifiers); + } else { + hid_listener_keycode_released(ev->usage_page, ev->keycode, ev->implicit_modifiers); + } + } + return 0; +} + +ZMK_LISTENER(hid_listener, hid_listener); +ZMK_SUBSCRIPTION(hid_listener, keycode_state_changed); \ No newline at end of file diff --git a/zmk/app/src/hog.c b/zmk/app/src/hog.c new file mode 100644 index 00000000..bcd652d2 --- /dev/null +++ b/zmk/app/src/hog.c @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include + +#include +#include +#include + +enum { + HIDS_REMOTE_WAKE = BIT(0), + HIDS_NORMALLY_CONNECTABLE = BIT(1), +}; + +struct hids_info { + u16_t version; /* version number of base USB HID Specification */ + u8_t code; /* country HID Device hardware is localized for. */ + u8_t flags; +} __packed; + +struct hids_report { + u8_t id; /* report id */ + u8_t type; /* report type */ +} __packed; + +static struct hids_info info = { + .version = 0x0000, + .code = 0x00, + .flags = HIDS_NORMALLY_CONNECTABLE & HIDS_REMOTE_WAKE, +}; + +enum { + HIDS_INPUT = 0x01, + HIDS_OUTPUT = 0x02, + HIDS_FEATURE = 0x03, +}; + +static struct hids_report input = { + .id = 0x01, + .type = HIDS_INPUT, +}; + +static struct hids_report consumer_input = { + .id = 0x02, + .type = HIDS_INPUT, +}; + +static bool host_requests_notification = false; +static u8_t ctrl_point; +// static u8_t proto_mode; + +static ssize_t read_hids_info(struct bt_conn *conn, const struct bt_gatt_attr *attr, void *buf, + u16_t len, u16_t offset) { + return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, + sizeof(struct hids_info)); +} + +static ssize_t read_hids_report_ref(struct bt_conn *conn, const struct bt_gatt_attr *attr, + void *buf, u16_t len, u16_t offset) { + return bt_gatt_attr_read(conn, attr, buf, len, offset, attr->user_data, + sizeof(struct hids_report)); +} + +static ssize_t read_hids_report_map(struct bt_conn *conn, const struct bt_gatt_attr *attr, + void *buf, u16_t len, u16_t offset) { + return bt_gatt_attr_read(conn, attr, buf, len, offset, zmk_hid_report_desc, + sizeof(zmk_hid_report_desc)); +} + +static ssize_t read_hids_input_report(struct bt_conn *conn, const struct bt_gatt_attr *attr, + void *buf, u16_t len, u16_t offset) { + struct zmk_hid_keypad_report_body *report_body = &zmk_hid_get_keypad_report()->body; + return bt_gatt_attr_read(conn, attr, buf, len, offset, report_body, + sizeof(struct zmk_hid_keypad_report_body)); +} + +static ssize_t read_hids_consumer_input_report(struct bt_conn *conn, + const struct bt_gatt_attr *attr, void *buf, + u16_t len, u16_t offset) { + struct zmk_hid_consumer_report_body *report_body = &zmk_hid_get_consumer_report()->body; + return bt_gatt_attr_read(conn, attr, buf, len, offset, report_body, + sizeof(struct zmk_hid_consumer_report_body)); +} + +// static ssize_t write_proto_mode(struct bt_conn *conn, +// const struct bt_gatt_attr *attr, +// const void *buf, u16_t len, u16_t offset, +// u8_t flags) +// { +// printk("PROTO CHANGED\n"); +// return 0; +// } + +static void input_ccc_changed(const struct bt_gatt_attr *attr, u16_t value) { + host_requests_notification = (value == BT_GATT_CCC_NOTIFY) ? 1 : 0; +} + +static ssize_t write_ctrl_point(struct bt_conn *conn, const struct bt_gatt_attr *attr, + const void *buf, u16_t len, u16_t offset, u8_t flags) { + u8_t *value = attr->user_data; + + if (offset + len > sizeof(ctrl_point)) { + return BT_GATT_ERR(BT_ATT_ERR_INVALID_OFFSET); + } + + memcpy(value + offset, buf, len); + + return len; +} + +/* HID Service Declaration */ +BT_GATT_SERVICE_DEFINE( + hog_svc, BT_GATT_PRIMARY_SERVICE(BT_UUID_HIDS), + // BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_PROTOCOL_MODE, BT_GATT_CHRC_WRITE_WITHOUT_RESP, + // BT_GATT_PERM_WRITE, NULL, write_proto_mode, &proto_mode), + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_INFO, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, read_hids_info, + NULL, &info), + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT_MAP, BT_GATT_CHRC_READ, BT_GATT_PERM_READ, + read_hids_report_map, NULL, NULL), + + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, + BT_GATT_PERM_READ_ENCRYPT, read_hids_input_report, NULL, NULL), + BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, read_hids_report_ref, NULL, + &input), + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_REPORT, BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, + BT_GATT_PERM_READ_ENCRYPT, read_hids_consumer_input_report, NULL, NULL), + BT_GATT_CCC(input_ccc_changed, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_DESCRIPTOR(BT_UUID_HIDS_REPORT_REF, BT_GATT_PERM_READ, read_hids_report_ref, NULL, + &consumer_input), + BT_GATT_CHARACTERISTIC(BT_UUID_HIDS_CTRL_POINT, BT_GATT_CHRC_WRITE_WITHOUT_RESP, + BT_GATT_PERM_WRITE, NULL, write_ctrl_point, &ctrl_point)); + +struct bt_conn *destination_connection() { + struct bt_conn *conn; + bt_addr_le_t *addr = zmk_ble_active_profile_addr(); + LOG_DBG("Address pointer %p", addr); + if (!bt_addr_le_cmp(addr, BT_ADDR_LE_ANY)) { + LOG_WRN("Not sending, no active address for current profile"); + return NULL; + } else if ((conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr)) == NULL) { + LOG_WRN("Not sending, not connected to active profile"); + return NULL; + } + + return conn; +} + +int zmk_hog_send_keypad_report(struct zmk_hid_keypad_report_body *report) { + struct bt_conn *conn = destination_connection(); + if (conn == NULL) { + return -ENOTCONN; + } + + LOG_DBG("Sending to NULL? %s", conn == NULL ? "yes" : "no"); + + int err = + bt_gatt_notify(conn, &hog_svc.attrs[5], report, sizeof(struct zmk_hid_keypad_report_body)); + bt_conn_unref(conn); + return err; +}; + +int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *report) { + struct bt_conn *conn = destination_connection(); + if (conn == NULL) { + return -ENOTCONN; + } + + int err = bt_gatt_notify(conn, &hog_svc.attrs[10], report, + sizeof(struct zmk_hid_consumer_report_body)); + bt_conn_unref(conn); + return err; +}; diff --git a/zmk/app/src/keymap.c b/zmk/app/src/keymap.c new file mode 100644 index 00000000..1d289e51 --- /dev/null +++ b/zmk/app/src/keymap.c @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include +#include + +#include +#include +#include + +static u32_t zmk_keymap_layer_state = 0; +static u8_t zmk_keymap_layer_default = 0; + +#define DT_DRV_COMPAT zmk_keymap + +#define LAYER_CHILD_LEN(node) 1 + +#define ZMK_KEYMAP_NODE DT_DRV_INST(0) +#define ZMK_KEYMAP_LAYERS_LEN (DT_INST_FOREACH_CHILD(0, LAYER_CHILD_LEN) 0) + +#define LAYER_NODE(l) DT_PHANDLE_BY_IDX(ZMK_KEYMAP_NODE, layers, l) + +#define _TRANSFORM_ENTRY(idx, layer) \ + { \ + .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(layer, bindings, idx)), \ + .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, bindings, idx, param1), (0), \ + (DT_PHA_BY_IDX(layer, bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, bindings, idx, param2), (0), \ + (DT_PHA_BY_IDX(layer, bindings, idx, param2))), \ + }, + +#define TRANSFORMED_LAYER(node) {UTIL_LISTIFY(DT_PROP_LEN(node, bindings), _TRANSFORM_ENTRY, node)}, + +#if ZMK_KEYMAP_HAS_SENSORS +#define _TRANSFORM_SENSOR_ENTRY(idx, layer) \ + { \ + .behavior_dev = DT_LABEL(DT_PHANDLE_BY_IDX(layer, sensor_bindings, idx)), \ + .param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param1), (0), \ + (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param1))), \ + .param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(layer, sensor_bindings, idx, param2), (0), \ + (DT_PHA_BY_IDX(layer, sensor_bindings, idx, param2))), \ + }, + +#define SENSOR_LAYER(node) \ + COND_CODE_1( \ + DT_NODE_HAS_PROP(node, sensor_bindings), \ + ({UTIL_LISTIFY(DT_PROP_LEN(node, sensor_bindings), _TRANSFORM_SENSOR_ENTRY, node)}), \ + ({})), + +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + +// State + +// When a behavior handles a key position "down" event, we record the layer state +// here so that even if that layer is deactivated before the "up", event, we +// still send the release event to the behavior in that layer also. +static u32_t zmk_keymap_active_behavior_layer[ZMK_KEYMAP_LEN]; + +static struct zmk_behavior_binding zmk_keymap[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { + DT_INST_FOREACH_CHILD(0, TRANSFORMED_LAYER)}; + +#if ZMK_KEYMAP_HAS_SENSORS + +static struct zmk_behavior_binding zmk_sensor_keymap[ZMK_KEYMAP_LAYERS_LEN] + [ZMK_KEYMAP_SENSORS_LEN] = { + DT_INST_FOREACH_CHILD(0, SENSOR_LAYER)}; + +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + +#define SET_LAYER_STATE(layer, state) \ + if (layer >= 32) { \ + return -EINVAL; \ + } \ + WRITE_BIT(zmk_keymap_layer_state, layer, state); \ + return 0; + +bool zmk_keymap_layer_active(u8_t layer) { + return (zmk_keymap_layer_state & (BIT(layer))) == (BIT(layer)); +}; + +int zmk_keymap_layer_activate(u8_t layer) { SET_LAYER_STATE(layer, true); }; + +int zmk_keymap_layer_deactivate(u8_t layer) { SET_LAYER_STATE(layer, false); }; + +int zmk_keymap_layer_toggle(u8_t layer) { + if (zmk_keymap_layer_active(layer)) { + return zmk_keymap_layer_deactivate(layer); + } + + return zmk_keymap_layer_activate(layer); +}; + +bool is_active_layer(u8_t layer, u32_t layer_state) { + return (layer_state & BIT(layer)) == BIT(layer) || layer == zmk_keymap_layer_default; +} + +int zmk_keymap_apply_position_state(int layer, u32_t position, bool pressed, s64_t timestamp) { + struct zmk_behavior_binding *binding = &zmk_keymap[layer][position]; + struct device *behavior; + struct zmk_behavior_binding_event event = { + .layer = layer, + .position = position, + .timestamp = timestamp, + }; + + LOG_DBG("layer: %d position: %d, binding name: %s", layer, position, + log_strdup(binding->behavior_dev)); + + behavior = device_get_binding(binding->behavior_dev); + + if (!behavior) { + LOG_DBG("No behavior assigned to %d on layer %d", position, layer); + return 1; + } + + if (pressed) { + return behavior_keymap_binding_pressed(binding, event); + } else { + return behavior_keymap_binding_released(binding, event); + } +} + +int zmk_keymap_position_state_changed(u32_t position, bool pressed, s64_t timestamp) { + for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { + u32_t layer_state = + pressed ? zmk_keymap_layer_state : zmk_keymap_active_behavior_layer[position]; + if (is_active_layer(layer, layer_state)) { + int ret = zmk_keymap_apply_position_state(layer, position, pressed, timestamp); + + zmk_keymap_active_behavior_layer[position] = zmk_keymap_layer_state; + + if (ret > 0) { + LOG_DBG("behavior processing to continue to next layer"); + continue; + } else if (ret < 0) { + LOG_DBG("Behavior returned error: %d", ret); + return ret; + } else { + return ret; + } + } + } + + return -ENOTSUP; +} + +#if ZMK_KEYMAP_HAS_SENSORS +int zmk_keymap_sensor_triggered(u8_t sensor_number, struct device *sensor) { + for (int layer = ZMK_KEYMAP_LAYERS_LEN - 1; layer >= zmk_keymap_layer_default; layer--) { + if (((zmk_keymap_layer_state & BIT(layer)) == BIT(layer) || + layer == zmk_keymap_layer_default) && + zmk_sensor_keymap[layer] != NULL) { + struct zmk_behavior_binding *binding = &zmk_sensor_keymap[layer][sensor_number]; + struct device *behavior; + int ret; + + LOG_DBG("layer: %d sensor_number: %d, binding name: %s", layer, sensor_number, + log_strdup(binding->behavior_dev)); + + behavior = device_get_binding(binding->behavior_dev); + + if (!behavior) { + LOG_DBG("No behavior assigned to %d on layer %d", sensor_number, layer); + continue; + } + + ret = behavior_sensor_keymap_binding_triggered(binding, sensor); + + if (ret > 0) { + LOG_DBG("behavior processing to continue to next layer"); + continue; + } else if (ret < 0) { + LOG_DBG("Behavior returned error: %d", ret); + return ret; + } else { + return ret; + } + } + } + + return -ENOTSUP; +} + +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + +int keymap_listener(const struct zmk_event_header *eh) { + if (is_position_state_changed(eh)) { + const struct position_state_changed *ev = cast_position_state_changed(eh); + return zmk_keymap_position_state_changed(ev->position, ev->state, ev->timestamp); +#if ZMK_KEYMAP_HAS_SENSORS + } else if (is_sensor_event(eh)) { + const struct sensor_event *ev = cast_sensor_event(eh); + return zmk_keymap_sensor_triggered(ev->sensor_number, ev->sensor); +#endif /* ZMK_KEYMAP_HAS_SENSORS */ + } + + return -ENOTSUP; +} + +ZMK_LISTENER(keymap, keymap_listener); +ZMK_SUBSCRIPTION(keymap, position_state_changed); + +#if ZMK_KEYMAP_HAS_SENSORS +ZMK_SUBSCRIPTION(keymap, sensor_event); +#endif /* ZMK_KEYMAP_HAS_SENSORS */ diff --git a/zmk/app/src/kscan.c b/zmk/app/src/kscan.c new file mode 100644 index 00000000..8575e708 --- /dev/null +++ b/zmk/app/src/kscan.c @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include + +#define ZMK_KSCAN_EVENT_STATE_PRESSED 0 +#define ZMK_KSCAN_EVENT_STATE_RELEASED 1 + +struct zmk_kscan_event { + u32_t row; + u32_t column; + u32_t state; +}; + +struct zmk_kscan_msg_processor { + struct k_work work; +} msg_processor; + +K_MSGQ_DEFINE(zmk_kscan_msgq, sizeof(struct zmk_kscan_event), CONFIG_ZMK_KSCAN_EVENT_QUEUE_SIZE, 4); + +static void zmk_kscan_callback(struct device *dev, u32_t row, u32_t column, bool pressed) { + struct zmk_kscan_event ev = { + .row = row, + .column = column, + .state = (pressed ? ZMK_KSCAN_EVENT_STATE_PRESSED : ZMK_KSCAN_EVENT_STATE_RELEASED)}; + + k_msgq_put(&zmk_kscan_msgq, &ev, K_NO_WAIT); + k_work_submit(&msg_processor.work); +} + +void zmk_kscan_process_msgq(struct k_work *item) { + struct zmk_kscan_event ev; + + while (k_msgq_get(&zmk_kscan_msgq, &ev, K_NO_WAIT) == 0) { + bool pressed = (ev.state == ZMK_KSCAN_EVENT_STATE_PRESSED); + u32_t position = zmk_matrix_transform_row_column_to_position(ev.row, ev.column); + struct position_state_changed *pos_ev; + LOG_DBG("Row: %d, col: %d, position: %d, pressed: %s\n", ev.row, ev.column, position, + (pressed ? "true" : "false")); + pos_ev = new_position_state_changed(); + pos_ev->state = pressed; + pos_ev->position = position; + pos_ev->timestamp = k_uptime_get(); + ZMK_EVENT_RAISE(pos_ev); + } +} + +int zmk_kscan_init(char *name) { + struct device *dev = device_get_binding(name); + if (dev == NULL) { + LOG_ERR("Failed to get the KSCAN device"); + return -EINVAL; + } + + k_work_init(&msg_processor.work, zmk_kscan_process_msgq); + + kscan_config(dev, zmk_kscan_callback); + kscan_enable_callback(dev); + + return 0; +} diff --git a/zmk/app/src/kscan_composite.c b/zmk/app/src/kscan_composite.c new file mode 100644 index 00000000..f8e8d604 --- /dev/null +++ b/zmk/app/src/kscan_composite.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_composite + +#include +#include +#include +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define MATRIX_NODE_ID DT_DRV_INST(0) +#define MATRIX_ROWS DT_PROP(MATRIX_NODE_ID, rows) +#define MATRIX_COLS DT_PROP(MATRIX_NODE_ID, columns) + +struct kscan_composite_child_config { + char *label; + u8_t row_offset; + u8_t column_offset; +}; + +#define CHILD_CONFIG(inst) \ + {.label = DT_LABEL(DT_PHANDLE(inst, kscan)), \ + .row_offset = DT_PROP(inst, row_offset), \ + .column_offset = DT_PROP(inst, column_offset)}, + +const struct kscan_composite_child_config kscan_composite_children[] = { + DT_FOREACH_CHILD(MATRIX_NODE_ID, CHILD_CONFIG)}; + +struct kscan_composite_config {}; + +struct kscan_composite_data { + kscan_callback_t callback; + + struct device *dev; +}; + +static int kscan_composite_enable_callback(struct device *dev) { + for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { + const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + + kscan_enable_callback(device_get_binding(cfg->label)); + } + return 0; +} + +static int kscan_composite_disable_callback(struct device *dev) { + for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { + const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + + kscan_disable_callback(device_get_binding(cfg->label)); + } + return 0; +} + +static void kscan_composite_child_callback(struct device *child_dev, u32_t row, u32_t column, + bool pressed) { + // TODO: Ideally we can get this passed into our callback! + struct device *dev = device_get_binding(DT_INST_LABEL(0)); + struct kscan_composite_data *data = dev->driver_data; + + for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { + const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + + if (device_get_binding(cfg->label) != child_dev) { + continue; + } + + data->callback(dev, row + cfg->row_offset, column + cfg->column_offset, pressed); + } +} + +static int kscan_composite_configure(struct device *dev, kscan_callback_t callback) { + struct kscan_composite_data *data = dev->driver_data; + + if (!callback) { + return -EINVAL; + } + + for (int i = 0; i < ARRAY_SIZE(kscan_composite_children); i++) { + const struct kscan_composite_child_config *cfg = &kscan_composite_children[i]; + + kscan_config(device_get_binding(cfg->label), &kscan_composite_child_callback); + } + + data->callback = callback; + + return 0; +} + +static int kscan_composite_init(struct device *dev) { + struct kscan_composite_data *data = dev->driver_data; + + data->dev = dev; + + return 0; +} + +static const struct kscan_driver_api mock_driver_api = { + .config = kscan_composite_configure, + .enable_callback = kscan_composite_enable_callback, + .disable_callback = kscan_composite_disable_callback, +}; + +static const struct kscan_composite_config kscan_composite_config = {}; + +static struct kscan_composite_data kscan_composite_data; + +DEVICE_AND_API_INIT(kscan_composite, DT_INST_LABEL(0), kscan_composite_init, &kscan_composite_data, + &kscan_composite_config, APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, + &mock_driver_api); diff --git a/zmk/app/src/kscan_mock.c b/zmk/app/src/kscan_mock.c new file mode 100644 index 00000000..f1614f1f --- /dev/null +++ b/zmk/app/src/kscan_mock.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_kscan_mock + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include + +struct kscan_mock_data { + kscan_callback_t callback; + + u32_t event_index; + struct k_delayed_work work; + struct device *dev; +}; + +static int kscan_mock_disable_callback(struct device *dev) { + struct kscan_mock_data *data = dev->driver_data; + + k_delayed_work_cancel(&data->work); + return 0; +} + +static int kscan_mock_configure(struct device *dev, kscan_callback_t callback) { + struct kscan_mock_data *data = dev->driver_data; + + if (!callback) { + return -EINVAL; + } + + data->event_index = 0; + data->callback = callback; + + return 0; +} + +#define MOCK_INST_INIT(n) \ + struct kscan_mock_config_##n { \ + u32_t events[DT_INST_PROP_LEN(n, events)]; \ + bool exit_after; \ + }; \ + static void kscan_mock_schedule_next_event_##n(struct device *dev) { \ + struct kscan_mock_data *data = dev->driver_data; \ + const struct kscan_mock_config_##n *cfg = dev->config_info; \ + if (data->event_index < DT_INST_PROP_LEN(n, events)) { \ + u32_t ev = cfg->events[data->event_index]; \ + LOG_DBG("delaying next keypress: %d", ZMK_MOCK_MSEC(ev)); \ + k_delayed_work_submit(&data->work, K_MSEC(ZMK_MOCK_MSEC(ev))); \ + } else if (cfg->exit_after) { \ + LOG_DBG("Exiting"); \ + exit(0); \ + } \ + } \ + static void kscan_mock_work_handler_##n(struct k_work *work) { \ + struct kscan_mock_data *data = CONTAINER_OF(work, struct kscan_mock_data, work); \ + const struct kscan_mock_config_##n *cfg = data->dev->config_info; \ + u32_t ev = cfg->events[data->event_index]; \ + LOG_DBG("ev %u row %d column %d state %d\n", ev, ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), \ + ZMK_MOCK_IS_PRESS(ev)); \ + data->callback(data->dev, ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), ZMK_MOCK_IS_PRESS(ev)); \ + kscan_mock_schedule_next_event_##n(data->dev); \ + data->event_index++; \ + } \ + static int kscan_mock_init_##n(struct device *dev) { \ + struct kscan_mock_data *data = dev->driver_data; \ + data->dev = dev; \ + k_delayed_work_init(&data->work, kscan_mock_work_handler_##n); \ + return 0; \ + } \ + static int kscan_mock_enable_callback_##n(struct device *dev) { \ + kscan_mock_schedule_next_event_##n(dev); \ + return 0; \ + } \ + static const struct kscan_driver_api mock_driver_api_##n = { \ + .config = kscan_mock_configure, \ + .enable_callback = kscan_mock_enable_callback_##n, \ + .disable_callback = kscan_mock_disable_callback, \ + }; \ + static struct kscan_mock_data kscan_mock_data_##n; \ + static const struct kscan_mock_config_##n kscan_mock_config_##n = { \ + .events = DT_INST_PROP(n, events), .exit_after = DT_INST_PROP(n, exit_after)}; \ + DEVICE_AND_API_INIT(kscan_mock_##n, DT_INST_LABEL(n), kscan_mock_init_##n, \ + &kscan_mock_data_##n, &kscan_mock_config_##n, APPLICATION, \ + CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &mock_driver_api_##n); + +DT_INST_FOREACH_STATUS_OKAY(MOCK_INST_INIT) diff --git a/zmk/app/src/main.c b/zmk/app/src/main.c new file mode 100644 index 00000000..0551356d --- /dev/null +++ b/zmk/app/src/main.c @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#include +LOG_MODULE_REGISTER(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include + +#define ZMK_KSCAN_DEV DT_LABEL(ZMK_MATRIX_NODE_ID) + +void main(void) { + struct device *ext_power; + LOG_INF("Welcome to ZMK!\n"); + + if (zmk_kscan_init(ZMK_KSCAN_DEV) != 0) { + return; + } + + // Enable the external VCC output + ext_power = device_get_binding("EXT_POWER"); + if (ext_power != NULL) { + const struct ext_power_api *ext_power_api = ext_power->driver_api; + ext_power_api->enable(ext_power); + } + +#ifdef CONFIG_ZMK_DISPLAY + zmk_display_init(); + + while (1) { + zmk_display_task_handler(); + } +#endif /* CONFIG_ZMK_DISPLAY */ +} diff --git a/zmk/app/src/matrix_transform.c b/zmk/app/src/matrix_transform.c new file mode 100644 index 00000000..4e68a56f --- /dev/null +++ b/zmk/app/src/matrix_transform.c @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#ifdef ZMK_KEYMAP_TRANSFORM_NODE + +#define _TRANSFORM_ENTRY(i, _) \ + [(KT_ROW(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i)) * ZMK_MATRIX_COLS) + \ + KT_COL(DT_PROP_BY_IDX(ZMK_KEYMAP_TRANSFORM_NODE, map, i))] = i, + +static u32_t transform[] = {UTIL_LISTIFY(ZMK_KEYMAP_LEN, _TRANSFORM_ENTRY, 0)}; + +#endif + +u32_t zmk_matrix_transform_row_column_to_position(u32_t row, u32_t column) { + u32_t matrix_index; + +#if DT_NODE_HAS_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset) + column += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, col_offset); +#endif + +#if DT_NODE_HAS_PROP(ZMK_KEYMAP_TRANSFORM_NODE, row_offset) + row += DT_PROP(ZMK_KEYMAP_TRANSFORM_NODE, row_offset); +#endif + + matrix_index = (row * ZMK_MATRIX_COLS) + column; + +#ifdef ZMK_KEYMAP_TRANSFORM_NODE + return transform[matrix_index]; +#else + return matrix_index; +#endif /* ZMK_KEYMAP_TRANSFORM_NODE */ +}; diff --git a/zmk/app/src/power.c b/zmk/app/src/power.c new file mode 100644 index 00000000..bad54d28 --- /dev/null +++ b/zmk/app/src/power.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include + +static u32_t power_last_uptime; + +#define MAX_IDLE_MS CONFIG_ZMK_IDLE_SLEEP_TIMEOUT + +bool is_usb_power_present() { +#ifdef CONFIG_USB + return zmk_usb_is_powered(); +#else + return false; +#endif /* CONFIG_USB */ +} + +enum power_states sys_pm_policy_next_state(s32_t ticks) { +#ifdef CONFIG_SYS_POWER_DEEP_SLEEP_STATES +#ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 + s32_t current = k_uptime_get(); + if (power_last_uptime > 0 && !is_usb_power_present() && + current - power_last_uptime > MAX_IDLE_MS) { + return SYS_POWER_STATE_DEEP_SLEEP_1; + } +#endif /* CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 */ +#endif /* CONFIG_SYS_POWER_DEEP_SLEEP_STATES */ + + return SYS_POWER_STATE_ACTIVE; +} + +int power_event_listener(const struct zmk_event_header *eh) { + power_last_uptime = k_uptime_get(); + + return 0; +} + +int power_init() { + power_last_uptime = k_uptime_get(); + + return 0; +} + +ZMK_LISTENER(power, power_event_listener); +ZMK_SUBSCRIPTION(power, position_state_changed); +ZMK_SUBSCRIPTION(power, sensor_event); + +SYS_INIT(power_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); \ No newline at end of file diff --git a/zmk/app/src/rgb_underglow.c b/zmk/app/src/rgb_underglow.c new file mode 100644 index 00000000..084482ea --- /dev/null +++ b/zmk/app/src/rgb_underglow.c @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include +#include + +#include +#include + +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#define STRIP_LABEL DT_LABEL(DT_CHOSEN(zmk_underglow)) +#define STRIP_NUM_PIXELS DT_PROP(DT_CHOSEN(zmk_underglow), chain_length) + +enum rgb_underglow_effect { + UNDERGLOW_EFFECT_SOLID, + UNDERGLOW_EFFECT_BREATHE, + UNDERGLOW_EFFECT_SPECTRUM, + UNDERGLOW_EFFECT_SWIRL, + UNDERGLOW_EFFECT_NUMBER // Used to track number of underglow effects +}; + +struct led_hsb { + u16_t h; + u8_t s; + u8_t b; +}; + +struct rgb_underglow_state { + u16_t hue; + u8_t saturation; + u8_t brightness; + u8_t animation_speed; + u8_t current_effect; + u16_t animation_step; + bool on; +}; + +struct device *led_strip; + +struct led_rgb pixels[STRIP_NUM_PIXELS]; + +struct rgb_underglow_state state; + +#if IS_ENABLED(CONFIG_SETTINGS) +static int rgb_settings_set(const char *name, size_t len, settings_read_cb read_cb, void *cb_arg) { + const char *next; + int rc; + + if (settings_name_steq(name, "state", &next) && !next) { + if (len != sizeof(state)) { + return -EINVAL; + } + + rc = read_cb(cb_arg, &state, sizeof(state)); + if (rc >= 0) { + return 0; + } + + return rc; + } + + return -ENOENT; +} + +struct settings_handler rgb_conf = {.name = "rgb/underglow", .h_set = rgb_settings_set}; +#endif + +static struct led_rgb hsb_to_rgb(struct led_hsb hsb) { + double r, g, b; + + u8_t i = hsb.h / 60; + double v = hsb.b / 100.0; + double s = hsb.s / 100.0; + double f = hsb.h / 360.0 * 6 - i; + double p = v * (1 - s); + double q = v * (1 - f * s); + double t = v * (1 - (1 - f) * s); + + switch (i % 6) { + case 0: + r = v; + g = t; + b = p; + break; + case 1: + r = q; + g = v; + b = p; + break; + case 2: + r = p; + g = v; + b = t; + break; + case 3: + r = p; + g = q; + b = v; + break; + case 4: + r = t; + g = p; + b = v; + break; + case 5: + r = v; + g = p; + b = q; + break; + } + + struct led_rgb rgb = {r : r * 255, g : g * 255, b : b * 255}; + + return rgb; +} + +static void zmk_rgb_underglow_off() { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + pixels[i] = (struct led_rgb){r : 0, g : 0, b : 0}; + } + + led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); +} + +static void zmk_rgb_underglow_effect_solid() { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + int hue = state.hue; + int sat = state.saturation; + int brt = state.brightness; + + struct led_hsb hsb = {hue, sat, brt}; + + pixels[i] = hsb_to_rgb(hsb); + } +} + +static void zmk_rgb_underglow_effect_breathe() { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + int hue = state.hue; + int sat = state.saturation; + int brt = abs(state.animation_step - 1200) / 12; + + struct led_hsb hsb = {hue, sat, brt}; + + pixels[i] = hsb_to_rgb(hsb); + } + + state.animation_step += state.animation_speed * 10; + + if (state.animation_step > 2400) { + state.animation_step = 0; + } +} + +static void zmk_rgb_underglow_effect_spectrum() { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + int hue = state.animation_step; + int sat = state.saturation; + int brt = state.brightness; + + struct led_hsb hsb = {hue, sat, brt}; + + pixels[i] = hsb_to_rgb(hsb); + } + + state.animation_step += state.animation_speed; + state.animation_step = state.animation_step % 360; +} + +static void zmk_rgb_underglow_effect_swirl() { + for (int i = 0; i < STRIP_NUM_PIXELS; i++) { + int hue = (360 / STRIP_NUM_PIXELS * i + state.animation_step) % 360; + int sat = state.saturation; + int brt = state.brightness; + + struct led_hsb hsb = {hue, sat, brt}; + + pixels[i] = hsb_to_rgb(hsb); + } + + state.animation_step += state.animation_speed * 2; + state.animation_step = state.animation_step % 360; +} + +static void zmk_rgb_underglow_tick(struct k_work *work) { + switch (state.current_effect) { + case UNDERGLOW_EFFECT_SOLID: + zmk_rgb_underglow_effect_solid(); + break; + case UNDERGLOW_EFFECT_BREATHE: + zmk_rgb_underglow_effect_breathe(); + break; + case UNDERGLOW_EFFECT_SPECTRUM: + zmk_rgb_underglow_effect_spectrum(); + break; + case UNDERGLOW_EFFECT_SWIRL: + zmk_rgb_underglow_effect_swirl(); + break; + } + + led_strip_update_rgb(led_strip, pixels, STRIP_NUM_PIXELS); +} + +K_WORK_DEFINE(underglow_work, zmk_rgb_underglow_tick); + +static void zmk_rgb_underglow_tick_handler(struct k_timer *timer) { + if (!state.on) { + zmk_rgb_underglow_off(); + + k_timer_stop(timer); + + return; + } + + k_work_submit(&underglow_work); +} + +K_TIMER_DEFINE(underglow_tick, zmk_rgb_underglow_tick_handler, NULL); + +#if IS_ENABLED(CONFIG_SETTINGS) +static void zmk_rgb_underglow_save_state_work() { + settings_save_one("rgb/underglow/state", &state, sizeof(state)); +} + +static struct k_delayed_work underglow_save_work; +#endif + +static int zmk_rgb_underglow_init(struct device *_arg) { + led_strip = device_get_binding(STRIP_LABEL); + if (led_strip) { + LOG_INF("Found LED strip device %s", STRIP_LABEL); + } else { + LOG_ERR("LED strip device %s not found", STRIP_LABEL); + return -EINVAL; + } + + state = (struct rgb_underglow_state){ + hue : CONFIG_ZMK_RGB_UNDERGLOW_HUE_START, + saturation : CONFIG_ZMK_RGB_UNDERGLOW_SAT_START, + brightness : CONFIG_ZMK_RGB_UNDERGLOW_BRT_START, + animation_speed : CONFIG_ZMK_RGB_UNDERGLOW_SPD_START, + current_effect : CONFIG_ZMK_RGB_UNDERGLOW_EFF_START, + animation_step : 0, + on : IS_ENABLED(CONFIG_ZMK_RGB_UNDERGLOW_ON_START) + }; + +#if IS_ENABLED(CONFIG_SETTINGS) + settings_register(&rgb_conf); + k_delayed_work_init(&underglow_save_work, zmk_rgb_underglow_save_state_work); +#endif + + k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50)); + + return 0; +} + +int zmk_rgb_underglow_save_state() { +#if IS_ENABLED(CONFIG_SETTINGS) + k_delayed_work_cancel(&underglow_save_work); + return k_delayed_work_submit(&underglow_save_work, K_MINUTES(1)); +#else + return 0; +#endif +} + +int zmk_rgb_underglow_cycle_effect(int direction) { + if (!led_strip) + return -ENODEV; + + if (state.current_effect == 0 && direction < 0) { + state.current_effect = UNDERGLOW_EFFECT_NUMBER - 1; + return 0; + } + + state.current_effect += direction; + + if (state.current_effect >= UNDERGLOW_EFFECT_NUMBER) { + state.current_effect = 0; + } + + state.animation_step = 0; + + return zmk_rgb_underglow_save_state(); +} + +int zmk_rgb_underglow_toggle() { + if (!led_strip) + return -ENODEV; + + state.on = !state.on; + + if (state.on) { + state.animation_step = 0; + k_timer_start(&underglow_tick, K_NO_WAIT, K_MSEC(50)); + } else { + zmk_rgb_underglow_off(); + + k_timer_stop(&underglow_tick); + } + + return zmk_rgb_underglow_save_state(); +} + +int zmk_rgb_underglow_change_hue(int direction) { + if (!led_strip) + return -ENODEV; + + if (state.hue == 0 && direction < 0) { + state.hue = 360 - CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP; + return 0; + } + + state.hue += direction * CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP; + + state.hue = state.hue % 360; + + return zmk_rgb_underglow_save_state(); +} + +int zmk_rgb_underglow_change_sat(int direction) { + if (!led_strip) + return -ENODEV; + + if (state.saturation == 0 && direction < 0) { + return 0; + } + + state.saturation += direction * CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP; + + if (state.saturation > 100) { + state.saturation = 100; + } + + return zmk_rgb_underglow_save_state(); +} + +int zmk_rgb_underglow_change_brt(int direction) { + if (!led_strip) + return -ENODEV; + + if (state.brightness == 0 && direction < 0) { + return 0; + } + + state.brightness += direction * CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP; + + if (state.brightness > 100) { + state.brightness = 100; + } + + return zmk_rgb_underglow_save_state(); +} + +int zmk_rgb_underglow_change_spd(int direction) { + if (!led_strip) + return -ENODEV; + + if (state.animation_speed == 1 && direction < 0) { + return 0; + } + + state.animation_speed += direction; + + if (state.animation_speed > 5) { + state.animation_speed = 5; + } + + return zmk_rgb_underglow_save_state(); +} + +SYS_INIT(zmk_rgb_underglow_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/zmk/app/src/sensors.c b/zmk/app/src/sensors.c new file mode 100644 index 00000000..15f374b3 --- /dev/null +++ b/zmk/app/src/sensors.c @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include + +#if ZMK_KEYMAP_HAS_SENSORS + +struct sensors_data_item { + u8_t sensor_number; + struct device *dev; + struct sensor_trigger trigger; +}; + +#define _SENSOR_ITEM(node) \ + {.dev = NULL, .trigger = {.type = SENSOR_TRIG_DELTA, .chan = SENSOR_CHAN_ROTATION}}, +#define SENSOR_ITEM(idx, _) \ + COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ + (_SENSOR_ITEM(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), ()) + +static struct sensors_data_item sensors[] = {UTIL_LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_ITEM, 0)}; + +static void zmk_sensors_trigger_handler(struct device *dev, struct sensor_trigger *trigger) { + int err; + struct sensors_data_item *item = CONTAINER_OF(trigger, struct sensors_data_item, trigger); + struct sensor_event *event; + + LOG_DBG("sensor %d", item->sensor_number); + + err = sensor_sample_fetch(dev); + if (err) { + LOG_WRN("Failed to fetch sample from device %d", err); + return; + } + + event = new_sensor_event(); + event->sensor_number = item->sensor_number; + event->sensor = dev; + + ZMK_EVENT_RAISE(event); +} + +static void zmk_sensors_init_item(const char *node, u8_t i, u8_t abs_i) { + LOG_DBG("Init %s at index %d with sensor_number %d", node, i, abs_i); + + sensors[i].dev = device_get_binding(node); + sensors[i].sensor_number = abs_i; + + if (!sensors[i].dev) { + LOG_WRN("Failed to find device for %s", node); + return; + } + + sensor_trigger_set(sensors[i].dev, &sensors[i].trigger, zmk_sensors_trigger_handler); +} + +#define _SENSOR_INIT(node) zmk_sensors_init_item(DT_LABEL(node), local_index++, absolute_index++); +#define SENSOR_INIT(idx, _i) \ + COND_CODE_1(DT_NODE_HAS_STATUS(ZMK_KEYMAP_SENSORS_BY_IDX(idx), okay), \ + (_SENSOR_INIT(ZMK_KEYMAP_SENSORS_BY_IDX(idx))), (absolute_index++;)) + +static int zmk_sensors_init(struct device *_arg) { + int local_index = 0; + int absolute_index = 0; + + UTIL_LISTIFY(ZMK_KEYMAP_SENSORS_LEN, SENSOR_INIT, 0) + return 0; +} + +SYS_INIT(zmk_sensors_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); + +#endif /* ZMK_KEYMAP_HAS_SENSORS */ \ No newline at end of file diff --git a/zmk/app/src/settings.c b/zmk/app/src/settings.c new file mode 100644 index 00000000..8914ccc3 --- /dev/null +++ b/zmk/app/src/settings.c @@ -0,0 +1,8 @@ +#include +#include +#include +#include + +static int zmk_settings_init(struct device *_arg) { return settings_load(); } + +SYS_INIT(zmk_settings_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); diff --git a/zmk/app/src/split/bluetooth/central.c b/zmk/app/src/split/bluetooth/central.c new file mode 100644 index 00000000..2d4d1ed8 --- /dev/null +++ b/zmk/app/src/split/bluetooth/central.c @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include +#include + +static int start_scan(void); + +#define POSITION_STATE_DATA_LEN 16 + +static struct bt_conn *default_conn; + +static struct bt_uuid_128 uuid = BT_UUID_INIT_128(ZMK_SPLIT_BT_SERVICE_UUID); +static struct bt_gatt_discover_params discover_params; +static struct bt_gatt_subscribe_params subscribe_params; + +static u8_t split_central_notify_func(struct bt_conn *conn, struct bt_gatt_subscribe_params *params, + const void *data, u16_t length) { + static u8_t position_state[POSITION_STATE_DATA_LEN]; + + u8_t changed_positions[POSITION_STATE_DATA_LEN]; + + if (!data) { + LOG_DBG("[UNSUBSCRIBED]"); + params->value_handle = 0U; + return BT_GATT_ITER_STOP; + } + + LOG_DBG("[NOTIFICATION] data %p length %u", data, length); + + for (int i = 0; i < POSITION_STATE_DATA_LEN; i++) { + changed_positions[i] = ((u8_t *)data)[i] ^ position_state[i]; + position_state[i] = ((u8_t *)data)[i]; + } + + for (int i = 0; i < POSITION_STATE_DATA_LEN; i++) { + for (int j = 0; j < 8; j++) { + if (changed_positions[i] & BIT(j)) { + u32_t position = (i * 8) + j; + bool pressed = position_state[i] & BIT(j); + struct position_state_changed *pos_ev = new_position_state_changed(); + pos_ev->position = position; + pos_ev->state = pressed; + pos_ev->timestamp = k_uptime_get(); + + LOG_DBG("Trigger key position state change for %d", position); + ZMK_EVENT_RAISE(pos_ev); + } + } + } + + return BT_GATT_ITER_CONTINUE; +} + +static int split_central_subscribe(struct bt_conn *conn) { + int err = bt_gatt_subscribe(conn, &subscribe_params); + switch (err) { + case -EALREADY: + LOG_DBG("[ALREADY SUBSCRIBED]"); + break; + // break; + // bt_gatt_unsubscribe(conn, &subscribe_params); + // return split_central_subscribe(conn); + case 0: + LOG_DBG("[SUBSCRIBED]"); + break; + default: + LOG_ERR("Subscribe failed (err %d)", err); + break; + } + + return 0; +} + +static u8_t split_central_discovery_func(struct bt_conn *conn, const struct bt_gatt_attr *attr, + struct bt_gatt_discover_params *params) { + int err; + + if (!attr) { + LOG_DBG("Discover complete"); + (void)memset(params, 0, sizeof(*params)); + return BT_GATT_ITER_STOP; + } + + LOG_DBG("[ATTRIBUTE] handle %u", attr->handle); + + if (!bt_uuid_cmp(discover_params.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + memcpy(&uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID), sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 1; + discover_params.type = BT_GATT_DISCOVER_CHARACTERISTIC; + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_ERR("Discover failed (err %d)", err); + } + } else if (!bt_uuid_cmp(discover_params.uuid, + BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID))) { + memcpy(&uuid, BT_UUID_GATT_CCC, sizeof(uuid)); + discover_params.uuid = &uuid.uuid; + discover_params.start_handle = attr->handle + 2; + discover_params.type = BT_GATT_DISCOVER_DESCRIPTOR; + subscribe_params.value_handle = bt_gatt_attr_value_handle(attr); + + err = bt_gatt_discover(conn, &discover_params); + if (err) { + LOG_ERR("Discover failed (err %d)", err); + } + } else { + subscribe_params.notify = split_central_notify_func; + subscribe_params.value = BT_GATT_CCC_NOTIFY; + subscribe_params.ccc_handle = attr->handle; + + split_central_subscribe(conn); + + return BT_GATT_ITER_STOP; + } + + return BT_GATT_ITER_STOP; +} + +static void split_central_process_connection(struct bt_conn *conn) { + int err; + + LOG_DBG("Current security for connection: %d", bt_conn_get_security(conn)); + + err = bt_conn_set_security(conn, BT_SECURITY_L2); + if (err) { + LOG_ERR("Failed to set security (reason %d)", err); + return; + } + + if (conn == default_conn && !subscribe_params.value) { + discover_params.uuid = &uuid.uuid; + discover_params.func = split_central_discovery_func; + discover_params.start_handle = 0x0001; + discover_params.end_handle = 0xffff; + discover_params.type = BT_GATT_DISCOVER_PRIMARY; + + err = bt_gatt_discover(default_conn, &discover_params); + if (err) { + LOG_ERR("Discover failed(err %d)", err); + return; + } + } + + struct bt_conn_info info; + + bt_conn_get_info(conn, &info); + + LOG_DBG("New connection params: Interval: %d, Latency: %d, PHY: %d", info.le.interval, + info.le.latency, info.le.phy->rx_phy); +} + +static bool split_central_eir_found(struct bt_data *data, void *user_data) { + bt_addr_le_t *addr = user_data; + int i; + + LOG_DBG("[AD]: %u data_len %u", data->type, data->data_len); + + switch (data->type) { + case BT_DATA_UUID128_SOME: + case BT_DATA_UUID128_ALL: + if (data->data_len % 16 != 0U) { + LOG_ERR("AD malformed"); + return true; + } + + for (i = 0; i < data->data_len; i += 16) { + struct bt_le_conn_param *param; + struct bt_uuid_128 uuid; + int err; + + if (!bt_uuid_create(&uuid.uuid, &data->data[i], 16)) { + LOG_ERR("Unable to load UUID"); + continue; + } + + if (bt_uuid_cmp(&uuid.uuid, BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID))) { + char uuid_str[BT_UUID_STR_LEN]; + char service_uuid_str[BT_UUID_STR_LEN]; + + bt_uuid_to_str(&uuid.uuid, uuid_str, sizeof(uuid_str)); + bt_uuid_to_str(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID), service_uuid_str, + sizeof(service_uuid_str)); + LOG_DBG("UUID %s does not match split UUID: %s", log_strdup(uuid_str), + log_strdup(service_uuid_str)); + continue; + } + + LOG_DBG("Found the split service"); + + zmk_ble_set_peripheral_addr(addr); + + err = bt_le_scan_stop(); + if (err) { + LOG_ERR("Stop LE scan failed (err %d)", err); + continue; + } + + default_conn = bt_conn_lookup_addr_le(BT_ID_DEFAULT, addr); + if (default_conn) { + LOG_DBG("Found existing connection"); + split_central_process_connection(default_conn); + } else { + param = BT_LE_CONN_PARAM(0x0006, 0x0006, 30, 400); + + err = bt_conn_le_create(addr, BT_CONN_LE_CREATE_CONN, param, &default_conn); + if (err) { + LOG_ERR("Create conn failed (err %d) (create conn? 0x%04x)", err, + BT_HCI_OP_LE_CREATE_CONN); + start_scan(); + } + + err = bt_conn_le_phy_update(default_conn, BT_CONN_LE_PHY_PARAM_2M); + if (err) { + LOG_ERR("Update phy conn failed (err %d)", err); + start_scan(); + } + } + + return false; + } + } + + return true; +} + +static void split_central_device_found(const bt_addr_le_t *addr, s8_t rssi, u8_t type, + struct net_buf_simple *ad) { + char dev[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(addr, dev, sizeof(dev)); + LOG_DBG("[DEVICE]: %s, AD evt type %u, AD data len %u, RSSI %i", log_strdup(dev), type, ad->len, + rssi); + + /* We're only interested in connectable events */ + if (type == BT_GAP_ADV_TYPE_ADV_IND || type == BT_GAP_ADV_TYPE_ADV_DIRECT_IND) { + bt_data_parse(ad, split_central_eir_found, (void *)addr); + } +} + +static int start_scan(void) { + int err; + + err = bt_le_scan_start(BT_LE_SCAN_PASSIVE, split_central_device_found); + if (err) { + LOG_ERR("Scanning failed to start (err %d)", err); + return err; + } + + LOG_DBG("Scanning successfully started"); + return 0; +} + +static void split_central_connected(struct bt_conn *conn, u8_t conn_err) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + if (conn_err) { + LOG_ERR("Failed to connect to %s (%u)", log_strdup(addr), conn_err); + + bt_conn_unref(default_conn); + default_conn = NULL; + + start_scan(); + return; + } + + LOG_DBG("Connected: %s", log_strdup(addr)); + + split_central_process_connection(conn); +} + +static void split_central_disconnected(struct bt_conn *conn, u8_t reason) { + char addr[BT_ADDR_LE_STR_LEN]; + + bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); + + LOG_DBG("Disconnected: %s (reason %d)", log_strdup(addr), reason); + + if (default_conn != conn) { + return; + } + + bt_conn_unref(default_conn); + default_conn = NULL; + + start_scan(); +} + +static struct bt_conn_cb conn_callbacks = { + .connected = split_central_connected, + .disconnected = split_central_disconnected, +}; + +int zmk_split_bt_central_init(struct device *_arg) { + bt_conn_cb_register(&conn_callbacks); + + return start_scan(); +} + +SYS_INIT(zmk_split_bt_central_init, APPLICATION, CONFIG_ZMK_BLE_INIT_PRIORITY); \ No newline at end of file diff --git a/zmk/app/src/split/bluetooth/service.c b/zmk/app/src/split/bluetooth/service.c new file mode 100644 index 00000000..86af685f --- /dev/null +++ b/zmk/app/src/split/bluetooth/service.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include + +#include +#include +#include + +static u8_t num_of_positions = ZMK_KEYMAP_LEN; +static u8_t position_state[16]; + +static ssize_t split_svc_pos_state(struct bt_conn *conn, const struct bt_gatt_attr *attrs, + void *buf, u16_t len, u16_t offset) { + return bt_gatt_attr_read(conn, attrs, buf, len, offset, &position_state, + sizeof(position_state)); +} + +static ssize_t split_svc_num_of_positions(struct bt_conn *conn, const struct bt_gatt_attr *attrs, + void *buf, u16_t len, u16_t offset) { + return bt_gatt_attr_read(conn, attrs, buf, len, offset, attrs->user_data, sizeof(u8_t)); +} + +static void split_svc_pos_state_ccc(const struct bt_gatt_attr *attr, u16_t value) { + LOG_DBG("value %d", value); +} + +BT_GATT_SERVICE_DEFINE( + split_svc, BT_GATT_PRIMARY_SERVICE(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_SERVICE_UUID)), + BT_GATT_CHARACTERISTIC(BT_UUID_DECLARE_128(ZMK_SPLIT_BT_CHAR_POSITION_STATE_UUID), + BT_GATT_CHRC_READ | BT_GATT_CHRC_NOTIFY, BT_GATT_PERM_READ_ENCRYPT, + split_svc_pos_state, NULL, &position_state), + BT_GATT_CCC(split_svc_pos_state_ccc, BT_GATT_PERM_READ_ENCRYPT | BT_GATT_PERM_WRITE_ENCRYPT), + BT_GATT_DESCRIPTOR(BT_UUID_NUM_OF_DIGITALS, BT_GATT_PERM_READ, split_svc_num_of_positions, NULL, + &num_of_positions), ); + +int zmk_split_bt_position_pressed(u8_t position) { + WRITE_BIT(position_state[position / 8], position % 8, true); + return bt_gatt_notify(NULL, &split_svc.attrs[1], &position_state, sizeof(position_state)); +} + +int zmk_split_bt_position_released(u8_t position) { + WRITE_BIT(position_state[position / 8], position % 8, false); + return bt_gatt_notify(NULL, &split_svc.attrs[1], &position_state, sizeof(position_state)); +} \ No newline at end of file diff --git a/zmk/app/src/split_listener.c b/zmk/app/src/split_listener.c new file mode 100644 index 00000000..b2adfb2e --- /dev/null +++ b/zmk/app/src/split_listener.c @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#define DT_DRV_COMPAT zmk_split_listener + +#include +#include +#include + +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +#include +#include +#include +#include + +int split_listener(const struct zmk_event_header *eh) { + LOG_DBG(""); + if (is_position_state_changed(eh)) { + const struct position_state_changed *ev = cast_position_state_changed(eh); + if (ev->state) { + return zmk_split_bt_position_pressed(ev->position); + } else { + return zmk_split_bt_position_released(ev->position); + } + } + return 0; +} + +ZMK_LISTENER(split_listener, split_listener); +ZMK_SUBSCRIPTION(split_listener, position_state_changed); \ No newline at end of file diff --git a/zmk/app/src/usb.c b/zmk/app/src/usb.c new file mode 100644 index 00000000..79d03c7b --- /dev/null +++ b/zmk/app/src/usb.c @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: MIT + */ + +#include +#include + +#include +#include + +#include +#include +#include +#include + +LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); + +static enum usb_dc_status_code usb_status = USB_DC_UNKNOWN; + +#ifdef CONFIG_ZMK_USB + +static struct device *hid_dev; + +static K_SEM_DEFINE(hid_sem, 1, 1); + +static void in_ready_cb(void) { k_sem_give(&hid_sem); } + +static const struct hid_ops ops = { + .int_in_ready = in_ready_cb, +}; + +int zmk_usb_hid_send_report(const u8_t *report, size_t len) { + switch (usb_status) { + case USB_DC_SUSPEND: + return usb_wakeup_request(); + case USB_DC_ERROR: + case USB_DC_RESET: + case USB_DC_DISCONNECTED: + case USB_DC_UNKNOWN: + return -ENODEV; + default: + k_sem_take(&hid_sem, K_MSEC(30)); + int err = hid_int_ep_write(hid_dev, report, len, NULL); + + if (err) { + k_sem_give(&hid_sem); + } + + return err; + } +} + +#endif /* CONFIG_ZMK_USB */ + +static void raise_usb_status_changed_event() { + struct usb_conn_state_changed *ev = new_usb_conn_state_changed(); + ev->conn_state = zmk_usb_get_conn_state(); + + ZMK_EVENT_RAISE(ev); +} + +enum usb_dc_status_code zmk_usb_get_status() { return usb_status; } + +enum zmk_usb_conn_state zmk_usb_get_conn_state() { + switch (usb_status) { + case USB_DC_DISCONNECTED: + case USB_DC_UNKNOWN: + return ZMK_USB_CONN_NONE; + + case USB_DC_ERROR: + case USB_DC_RESET: + return ZMK_USB_CONN_POWERED; + + default: + return ZMK_USB_CONN_HID; + } +} + +void usb_status_cb(enum usb_dc_status_code status, const u8_t *params) { + usb_status = status; + raise_usb_status_changed_event(); +}; + +static int zmk_usb_init(struct device *_arg) { + int usb_enable_ret; + +#ifdef CONFIG_ZMK_USB + hid_dev = device_get_binding("HID_0"); + if (hid_dev == NULL) { + LOG_ERR("Unable to locate HID device"); + return -EINVAL; + } + + usb_hid_register_device(hid_dev, zmk_hid_report_desc, sizeof(zmk_hid_report_desc), &ops); + + usb_hid_init(hid_dev); + +#endif /* CONFIG_ZMK_USB */ + + usb_enable_ret = usb_enable(usb_status_cb); + + if (usb_enable_ret != 0) { + LOG_ERR("Unable to enable USB"); + return -EINVAL; + } + + return 0; +} + +SYS_INIT(zmk_usb_init, APPLICATION, CONFIG_ZMK_USB_INIT_PRIORITY); diff --git a/zmk/app/tests/hold-tap/README.md b/zmk/app/tests/hold-tap/README.md new file mode 100644 index 00000000..0630132d --- /dev/null +++ b/zmk/app/tests/hold-tap/README.md @@ -0,0 +1 @@ +Refer to the pdf/open document "zmk-modtap-proposal.{pdf,odt}" in this directory for a visual representation of the numbered tests for hold-tap. diff --git a/zmk/app/tests/hold-tap/balanced/1-dn-up/events.patterns b/zmk/app/tests/hold-tap/balanced/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..c088e5e6 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..a8b5d1fe --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 00000000..ca458c7b --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..ef4dfa5f --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 00000000..392d328b --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..70a3353d --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..77306cd0 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..121f0071 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..14413311 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 00000000..ae9dcc96 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..c1e03ad2 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..95330e69 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..95330e69 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 2) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..63219ee0 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (balanced event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 diff --git a/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/behavior_keymap.dtsi b/zmk/app/tests/hold-tap/balanced/behavior_keymap.dtsi new file mode 100644 index 00000000..7d18bb6e --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/zmk/app/tests/hold-tap/balanced/many-nested/events.patterns b/zmk/app/tests/hold-tap/balanced/many-nested/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/many-nested/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot b/zmk/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot new file mode 100644 index 00000000..dda02ddf --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/many-nested/keycode_events.snapshot @@ -0,0 +1,20 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +ht_binding_pressed: 2 new undecided hold_tap +ht_binding_released: 0 cleaning up hold-tap +ht_decide: 2 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe3 mods 0x00 +ht_binding_pressed: 3 new undecided hold_tap +ht_binding_released: 1 cleaning up hold-tap +ht_decide: 3 decided hold (balanced event 3) +kp_pressed: usage_page 0x07 keycode 0xe2 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe0 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe3 mods 0x00 +ht_binding_released: 2 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe2 mods 0x00 +ht_binding_released: 3 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/balanced/many-nested/native_posix.keymap b/zmk/app/tests/hold-tap/balanced/many-nested/native_posix.keymap new file mode 100644 index 00000000..f51ffb56 --- /dev/null +++ b/zmk/app/tests/hold-tap/balanced/many-nested/native_posix.keymap @@ -0,0 +1,41 @@ +#include +#include +#include + +/ { + behaviors { + ht_bal: behavior_hold_tap_balanced { + compatible = "zmk,behavior-hold-tap"; + label = "HOLD_TAP_BALANCED"; + #binding-cells = <2>; + flavor = "balanced"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_bal LEFT_SHIFT F &ht_bal LEFT_CONTROL J + &ht_bal LEFT_GUI H &ht_bal LEFT_ALT L + >; + }; + }; +}; + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(0,1,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_PRESS(1,1,100) + ZMK_MOCK_RELEASE(0,0,100) + ZMK_MOCK_RELEASE(0,1,100) + ZMK_MOCK_RELEASE(1,0,100) + ZMK_MOCK_RELEASE(1,1,100) + >; +}; diff --git a/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..2eb64758 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..86517aa3 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 00000000..b7434c65 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..ffb6aadd --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 00000000..392d328b --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..1254fedd --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..77306cd0 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..ba7b48b3 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided hold (hold-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..14413311 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 00000000..c8acfc17 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (hold-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..97cd07bf --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..97cd07bf --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..97cd07bf --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..2a21d929 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (hold-preferred event 1) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 diff --git a/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi b/zmk/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi new file mode 100644 index 00000000..64847a57 --- /dev/null +++ b/zmk/app/tests/hold-tap/hold-preferred/behavior_keymap.dtsi @@ -0,0 +1,29 @@ +#include +#include +#include + + + +/ { + behaviors { + ht_hold: behavior_hold_hold_tap { + compatible = "zmk,behavior-hold-tap"; + label = "hold_hold_tap"; + #binding-cells = <2>; + flavor = "hold-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &ht_hold LEFT_SHIFT F &ht_hold LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot new file mode 100644 index 00000000..57e4fcd7 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap new file mode 100644 index 00000000..10336ef3 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/1-dn-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..71ba8da4 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/keycode_events.snapshot @@ -0,0 +1,5 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap new file mode 100644 index 00000000..aa93b862 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/2-dn-timer-up/native_posix.keymap @@ -0,0 +1,11 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,500) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot new file mode 100644 index 00000000..0bc731f0 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap new file mode 100644 index 00000000..6f08689b --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3a-moddn-dn-modup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..6a3398f4 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0xe4 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe4 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap new file mode 100644 index 00000000..392d328b --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3b-moddn-dn-modup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,1,10) /*ctrl*/ + ZMK_MOCK_PRESS(0,0,50) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,1,300) + /*timer*/ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..e518582c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..77306cd0 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3c-kcdn-dn-kcup-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /*d*/ + ZMK_MOCK_PRESS(0,0,100) /*mt f-shift */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..b3b06730 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +ht_binding_pressed: 0 new undecided hold_tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..14413311 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/3d-kcdn-dn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,13 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) /* d */ + ZMK_MOCK_PRESS(0,0,100) /* mt f-shift */ + ZMK_MOCK_RELEASE(1,0,400) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot new file mode 100644 index 00000000..7f454210 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/keycode_events.snapshot @@ -0,0 +1,10 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_pressed: 1 new undecided hold_tap +ht_decide: 1 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x0d mods 0x00 +kp_released: usage_page 0x07 keycode 0x0d mods 0x00 +ht_binding_released: 1 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap new file mode 100644 index 00000000..c10c6d64 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-htdn-timer-htup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(0,1,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..ade0d3ea --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce163f53 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4a-dn-kcdn-timer-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,200) + ZMK_MOCK_PRESS(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot new file mode 100644 index 00000000..ade0d3ea --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided hold (tap-preferred event 3) +kp_pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0xe1 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap new file mode 100644 index 00000000..7abda41a --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4b-dn-kcdn-kcup-timer-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(1,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(0,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot new file mode 100644 index 00000000..418312c3 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap diff --git a/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap new file mode 100644 index 00000000..ce030af3 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4c-dn-kcdn-kcup-up/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + /* timer */ + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns new file mode 100644 index 00000000..fdf2b15c --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p +s/.*on_hold_tap_binding/ht_binding/p +s/.*decide_hold_tap/ht_decide/p \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot new file mode 100644 index 00000000..c0b4c0b7 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/keycode_events.snapshot @@ -0,0 +1,7 @@ +ht_binding_pressed: 0 new undecided hold_tap +ht_decide: 0 decided tap (tap-preferred event 0) +kp_pressed: usage_page 0x07 keycode 0x09 mods 0x00 +kp_pressed: usage_page 0x07 keycode 0x07 mods 0x00 +kp_released: usage_page 0x07 keycode 0x09 mods 0x00 +ht_binding_released: 0 cleaning up hold-tap +kp_released: usage_page 0x07 keycode 0x07 mods 0x00 diff --git a/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap new file mode 100644 index 00000000..54676600 --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/4d-dn-kcdn-timer-up-kcup/native_posix.keymap @@ -0,0 +1,14 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,100) + ZMK_MOCK_PRESS(1,0,100) + ZMK_MOCK_RELEASE(0,0,200) + /* timer fires */ + ZMK_MOCK_RELEASE(1,0,10) + >; +}; \ No newline at end of file diff --git a/zmk/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi b/zmk/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi new file mode 100644 index 00000000..6e91466d --- /dev/null +++ b/zmk/app/tests/hold-tap/tap-preferred/behavior_keymap.dtsi @@ -0,0 +1,27 @@ +#include +#include +#include + +/ { + behaviors { + tp: behavior_tap_preferred { + compatible = "zmk,behavior-hold-tap"; + label = "MOD_TAP"; + #binding-cells = <2>; + flavor = "tap-preferred"; + tapping_term_ms = <300>; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &tp LEFT_SHIFT F &tp LEFT_CONTROL J + &kp D &kp RIGHT_CONTROL>; + }; + }; +}; diff --git a/zmk/app/tests/hold-tap/zmk-modtap-proposal.odg b/zmk/app/tests/hold-tap/zmk-modtap-proposal.odg new file mode 100644 index 0000000000000000000000000000000000000000..82f84369d4cba1d75c4dc16e3064fbdab1ed225b GIT binary patch literal 23148 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 JA(NlI{{!HqraS-u literal 0 HcmV?d00001 diff --git a/zmk/app/tests/hold-tap/zmk-modtap-proposal.pdf b/zmk/app/tests/hold-tap/zmk-modtap-proposal.pdf new file mode 100644 index 0000000000000000000000000000000000000000..33048ca1d64eda9816137c4a01f255ab64badbdd GIT binary patch literal 25493 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 X*2Dq(%k)r~h@c1=8=IUeg6w|)Oj +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &none + &kp C_NEXT &none>; + }; + }; +}; diff --git a/zmk/app/tests/keypress/cp-press-release/events.patterns b/zmk/app/tests/keypress/cp-press-release/events.patterns new file mode 100644 index 00000000..833100f6 --- /dev/null +++ b/zmk/app/tests/keypress/cp-press-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/zmk/app/tests/keypress/cp-press-release/keycode_events.snapshot b/zmk/app/tests/keypress/cp-press-release/keycode_events.snapshot new file mode 100644 index 00000000..95d24a49 --- /dev/null +++ b/zmk/app/tests/keypress/cp-press-release/keycode_events.snapshot @@ -0,0 +1,2 @@ +pressed: usage_page 0x0c keycode 0xb5 mods 0x00 +pressed: usage_page 0x0c keycode 0xb5 mods 0x00 diff --git a/zmk/app/tests/keypress/cp-press-release/native_posix.keymap b/zmk/app/tests/keypress/cp-press-release/native_posix.keymap new file mode 100644 index 00000000..bf93af7d --- /dev/null +++ b/zmk/app/tests/keypress/cp-press-release/native_posix.keymap @@ -0,0 +1,5 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/keypress/kp-press-release/events.patterns b/zmk/app/tests/keypress/kp-press-release/events.patterns new file mode 100644 index 00000000..833100f6 --- /dev/null +++ b/zmk/app/tests/keypress/kp-press-release/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode_//p \ No newline at end of file diff --git a/zmk/app/tests/keypress/kp-press-release/keycode_events.snapshot b/zmk/app/tests/keypress/kp-press-release/keycode_events.snapshot new file mode 100644 index 00000000..80cac202 --- /dev/null +++ b/zmk/app/tests/keypress/kp-press-release/keycode_events.snapshot @@ -0,0 +1,2 @@ +pressed: usage_page 0x07 keycode 0x05 mods 0x00 +released: usage_page 0x07 keycode 0x05 mods 0x00 diff --git a/zmk/app/tests/keypress/kp-press-release/native_posix.keymap b/zmk/app/tests/keypress/kp-press-release/native_posix.keymap new file mode 100644 index 00000000..279b084d --- /dev/null +++ b/zmk/app/tests/keypress/kp-press-release/native_posix.keymap @@ -0,0 +1,5 @@ +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/events.patterns b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot new file mode 100644 index 00000000..6218e650 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/keycode_events.snapshot @@ -0,0 +1,17 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 2 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 1 +unreg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap new file mode 100644 index 00000000..1f3502d6 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-dn-lctl-up-lctl-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/events.patterns b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot new file mode 100644 index 00000000..42324284 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/keycode_events.snapshot @@ -0,0 +1,9 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap new file mode 100644 index 00000000..9c7d7c83 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lctl-up/native_posix.keymap @@ -0,0 +1,25 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/events.patterns b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot new file mode 100644 index 00000000..60d829a6 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/keycode_events.snapshot @@ -0,0 +1,18 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +reg: Modifier 1 count 1 +reg: Modifiers set to 0x03 +mods: Modifiers set to 0x03 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x02 +mods: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0xe1 mods 0x00 +unreg: Modifier 1 count: 0 +unreg: Modifier 1 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap new file mode 100644 index 00000000..34bb522b --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lctl-up-lsft-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/events.patterns b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot new file mode 100644 index 00000000..b4755e5b --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/keycode_events.snapshot @@ -0,0 +1,18 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0xe1 mods 0x00 +reg: Modifier 1 count 1 +reg: Modifiers set to 0x03 +mods: Modifiers set to 0x03 +released: usage_page 0x07 keycode 0xe1 mods 0x00 +unreg: Modifier 1 count: 0 +unreg: Modifier 1 released +unreg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap new file mode 100644 index 00000000..68e4de73 --- /dev/null +++ b/zmk/app/tests/modifiers/explicit/kp-lctl-dn-lsft-dn-lsft-up-lctl-up/native_posix.keymap @@ -0,0 +1,28 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,0,10) + + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LEFT_CONTROL &kp LEFT_CONTROL + &kp LEFT_SHIFT &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/events.patterns b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/keycode_events.snapshot b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/keycode_events.snapshot new file mode 100644 index 00000000..61dd271b --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/keycode_events.snapshot @@ -0,0 +1,8 @@ +pressed: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x02 +pressed: usage_page 0x07 keycode 0x04 mods 0x01 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0x04 mods 0x01 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap new file mode 100644 index 00000000..73fa7cc8 --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending new file mode 100644 index 00000000..3f49005a --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod1-up-mod2-up/pending @@ -0,0 +1,9 @@ +This test fails because the hid_listener_keycode_released function +releases implicit modifiers always, even if they were not set by the +key that's going up. Also see the comment in that function: + + If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released + prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time. + Solving this would require keeping track of which key's implicit modifiers are currently + active and only releasing modifiers at that time. + diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/events.patterns b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/keycode_events.snapshot b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/keycode_events.snapshot new file mode 100644 index 00000000..e8a231fe --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/keycode_events.snapshot @@ -0,0 +1,8 @@ +pressed: usage_page 0x07 keycode 0x04 mods 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x02 +released: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x04 mods 0x01 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap new file mode 100644 index 00000000..109d60e5 --- /dev/null +++ b/zmk/app/tests/modifiers/implicit/kp-mod1-dn-mod2-dn-mod2-up-mod1-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(0,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(0,0,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &none &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/events.patterns b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot new file mode 100644 index 00000000..40c5841e --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/keycode_events.snapshot @@ -0,0 +1,13 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x03 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 +released: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap new file mode 100644 index 00000000..09816d94 --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-lctl-up-mod-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + ZMK_MOCK_RELEASE(0,1,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; +}; diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/events.patterns b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/events.patterns new file mode 100644 index 00000000..cbf21aff --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/events.patterns @@ -0,0 +1,4 @@ +s/.*hid_listener_keycode_//p +s/.*hid_register_mod/reg/p +s/.*hid_unregister_mod/unreg/p +s/.*zmk_hid_.*Modifiers set to /mods: Modifiers set to /p \ No newline at end of file diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot new file mode 100644 index 00000000..5df571be --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/keycode_events.snapshot @@ -0,0 +1,13 @@ +pressed: usage_page 0x07 keycode 0xe0 mods 0x00 +reg: Modifier 0 count 1 +reg: Modifiers set to 0x01 +mods: Modifiers set to 0x01 +pressed: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x03 +released: usage_page 0x07 keycode 0x05 mods 0x02 +mods: Modifiers set to 0x01 +released: usage_page 0x07 keycode 0xe0 mods 0x00 +unreg: Modifier 0 count: 0 +unreg: Modifier 0 released +unreg: Modifiers set to 0x00 +mods: Modifiers set to 0x00 diff --git a/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap new file mode 100644 index 00000000..1de00a0e --- /dev/null +++ b/zmk/app/tests/modifiers/mixed/kp-lctl-dn-mod-dn-mod-up-lctl-up/native_posix.keymap @@ -0,0 +1,27 @@ +#include +#include +#include + + +&kscan { + events = < + ZMK_MOCK_PRESS(1,0,10) + ZMK_MOCK_PRESS(0,1,10) + ZMK_MOCK_RELEASE(0,1,10) + ZMK_MOCK_RELEASE(1,0,10) + >; +}; + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp LC(A) &kp LS(B) + &kp LEFT_CONTROL &none + >; + }; + }; +}; diff --git a/zmk/app/tests/momentary-layer/behavior_keymap.dtsi b/zmk/app/tests/momentary-layer/behavior_keymap.dtsi new file mode 100644 index 00000000..6cc3140f --- /dev/null +++ b/zmk/app/tests/momentary-layer/behavior_keymap.dtsi @@ -0,0 +1,28 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &mo 1 + &kp D &kp G>; + }; + + lower_layer { + bindings = < + &kp C_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/zmk/app/tests/momentary-layer/early-key-release/events.patterns b/zmk/app/tests/momentary-layer/early-key-release/events.patterns new file mode 100644 index 00000000..bd7b4880 --- /dev/null +++ b/zmk/app/tests/momentary-layer/early-key-release/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p \ No newline at end of file diff --git a/zmk/app/tests/momentary-layer/early-key-release/keycode_events.snapshot b/zmk/app/tests/momentary-layer/early-key-release/keycode_events.snapshot new file mode 100644 index 00000000..82ebc67c --- /dev/null +++ b/zmk/app/tests/momentary-layer/early-key-release/keycode_events.snapshot @@ -0,0 +1,4 @@ +kp_pressed: usage_page 0x07 keycode 0x05 mods 0x00 +mo_pressed: position 1 layer 1 +kp_released: usage_page 0x07 keycode 0x05 mods 0x00 +mo_released: position 1 layer 1 diff --git a/zmk/app/tests/momentary-layer/early-key-release/native_posix.keymap b/zmk/app/tests/momentary-layer/early-key-release/native_posix.keymap new file mode 100644 index 00000000..e7628c0e --- /dev/null +++ b/zmk/app/tests/momentary-layer/early-key-release/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/momentary-layer/normal/events.patterns b/zmk/app/tests/momentary-layer/normal/events.patterns new file mode 100644 index 00000000..bd7b4880 --- /dev/null +++ b/zmk/app/tests/momentary-layer/normal/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*mo_keymap_binding/mo/p \ No newline at end of file diff --git a/zmk/app/tests/momentary-layer/normal/keycode_events.snapshot b/zmk/app/tests/momentary-layer/normal/keycode_events.snapshot new file mode 100644 index 00000000..247128fe --- /dev/null +++ b/zmk/app/tests/momentary-layer/normal/keycode_events.snapshot @@ -0,0 +1,4 @@ +mo_pressed: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00 +kp_released: usage_page 0x0c keycode 0xb5 mods 0x00 +mo_released: position 1 layer 1 diff --git a/zmk/app/tests/momentary-layer/normal/native_posix.keymap b/zmk/app/tests/momentary-layer/normal/native_posix.keymap new file mode 100644 index 00000000..7f736904 --- /dev/null +++ b/zmk/app/tests/momentary-layer/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/none/behavior_keymap.dtsi b/zmk/app/tests/none/behavior_keymap.dtsi new file mode 100644 index 00000000..0a4f7cb7 --- /dev/null +++ b/zmk/app/tests/none/behavior_keymap.dtsi @@ -0,0 +1,22 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &none &mo 1 + &kp A &none>; + }; + + lower_layer { + bindings = < + &none &trans + &none &kp A>; + }; + }; +}; diff --git a/zmk/app/tests/none/layered/events.patterns b/zmk/app/tests/none/layered/events.patterns new file mode 100644 index 00000000..3c9d3f83 --- /dev/null +++ b/zmk/app/tests/none/layered/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/zmk/app/tests/none/layered/keycode_events.snapshot b/zmk/app/tests/none/layered/keycode_events.snapshot new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/tests/none/layered/native_posix.keymap b/zmk/app/tests/none/layered/native_posix.keymap new file mode 100644 index 00000000..59ea4811 --- /dev/null +++ b/zmk/app/tests/none/layered/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/none/normal/events.patterns b/zmk/app/tests/none/normal/events.patterns new file mode 100644 index 00000000..3c9d3f83 --- /dev/null +++ b/zmk/app/tests/none/normal/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/zmk/app/tests/none/normal/keycode_events.snapshot b/zmk/app/tests/none/normal/keycode_events.snapshot new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/tests/none/normal/native_posix.keymap b/zmk/app/tests/none/normal/native_posix.keymap new file mode 100644 index 00000000..94d7539c --- /dev/null +++ b/zmk/app/tests/none/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/toggle-layer/behavior_keymap.dtsi b/zmk/app/tests/toggle-layer/behavior_keymap.dtsi new file mode 100644 index 00000000..2523d867 --- /dev/null +++ b/zmk/app/tests/toggle-layer/behavior_keymap.dtsi @@ -0,0 +1,28 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &kp B &tog 1 + &kp D &kp G>; + }; + + lower_layer { + bindings = < + &kp C_NEXT &trans + &kp L &kp J>; + }; + + raise_layer { + bindings = < + &kp W &kp U + &kp X &kp M>; + }; + }; +}; diff --git a/zmk/app/tests/toggle-layer/early-key-release/events.patterns b/zmk/app/tests/toggle-layer/early-key-release/events.patterns new file mode 100644 index 00000000..397fef4f --- /dev/null +++ b/zmk/app/tests/toggle-layer/early-key-release/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*tog_keymap_binding/tog/p \ No newline at end of file diff --git a/zmk/app/tests/toggle-layer/early-key-release/keycode_events.snapshot b/zmk/app/tests/toggle-layer/early-key-release/keycode_events.snapshot new file mode 100644 index 00000000..6b4d50bd --- /dev/null +++ b/zmk/app/tests/toggle-layer/early-key-release/keycode_events.snapshot @@ -0,0 +1,6 @@ +kp_pressed: usage_page 0x07 keycode 0x05 mods 0x00 +tog_pressed: position 1 layer 1 +kp_released: usage_page 0x07 keycode 0x05 mods 0x00 +tog_released: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00 +kp_released: usage_page 0x0c keycode 0xb5 mods 0x00 diff --git a/zmk/app/tests/toggle-layer/early-key-release/native_posix.keymap b/zmk/app/tests/toggle-layer/early-key-release/native_posix.keymap new file mode 100644 index 00000000..6b2b8f20 --- /dev/null +++ b/zmk/app/tests/toggle-layer/early-key-release/native_posix.keymap @@ -0,0 +1,9 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/toggle-layer/normal/events.patterns b/zmk/app/tests/toggle-layer/normal/events.patterns new file mode 100644 index 00000000..397fef4f --- /dev/null +++ b/zmk/app/tests/toggle-layer/normal/events.patterns @@ -0,0 +1,2 @@ +s/.*hid_listener_keycode/kp/p +s/.*tog_keymap_binding/tog/p \ No newline at end of file diff --git a/zmk/app/tests/toggle-layer/normal/keycode_events.snapshot b/zmk/app/tests/toggle-layer/normal/keycode_events.snapshot new file mode 100644 index 00000000..d03295ef --- /dev/null +++ b/zmk/app/tests/toggle-layer/normal/keycode_events.snapshot @@ -0,0 +1,4 @@ +tog_pressed: position 1 layer 1 +tog_released: position 1 layer 1 +kp_pressed: usage_page 0x0c keycode 0xb5 mods 0x00 +kp_released: usage_page 0x0c keycode 0xb5 mods 0x00 diff --git a/zmk/app/tests/toggle-layer/normal/native_posix.keymap b/zmk/app/tests/toggle-layer/normal/native_posix.keymap new file mode 100644 index 00000000..202c105c --- /dev/null +++ b/zmk/app/tests/toggle-layer/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/transparent/behavior_keymap.dtsi b/zmk/app/tests/transparent/behavior_keymap.dtsi new file mode 100644 index 00000000..d6c5e27f --- /dev/null +++ b/zmk/app/tests/transparent/behavior_keymap.dtsi @@ -0,0 +1,22 @@ +#include +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + label ="Default keymap"; + + default_layer { + bindings = < + &trans &mo 1 + &kp A &none>; + }; + + lower_layer { + bindings = < + &trans &trans + &trans &kp A>; + }; + }; +}; diff --git a/zmk/app/tests/transparent/layered/events.patterns b/zmk/app/tests/transparent/layered/events.patterns new file mode 100644 index 00000000..3c9d3f83 --- /dev/null +++ b/zmk/app/tests/transparent/layered/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/zmk/app/tests/transparent/layered/keycode_events.snapshot b/zmk/app/tests/transparent/layered/keycode_events.snapshot new file mode 100644 index 00000000..5e707b85 --- /dev/null +++ b/zmk/app/tests/transparent/layered/keycode_events.snapshot @@ -0,0 +1,2 @@ +kp_pressed: usage_page 0x07 keycode 0x04 mods 0x00 +kp_released: usage_page 0x07 keycode 0x04 mods 0x00 diff --git a/zmk/app/tests/transparent/layered/native_posix.keymap b/zmk/app/tests/transparent/layered/native_posix.keymap new file mode 100644 index 00000000..59ea4811 --- /dev/null +++ b/zmk/app/tests/transparent/layered/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/tests/transparent/normal/events.patterns b/zmk/app/tests/transparent/normal/events.patterns new file mode 100644 index 00000000..3c9d3f83 --- /dev/null +++ b/zmk/app/tests/transparent/normal/events.patterns @@ -0,0 +1 @@ +s/.*hid_listener_keycode/kp/p \ No newline at end of file diff --git a/zmk/app/tests/transparent/normal/keycode_events.snapshot b/zmk/app/tests/transparent/normal/keycode_events.snapshot new file mode 100644 index 00000000..e69de29b diff --git a/zmk/app/tests/transparent/normal/native_posix.keymap b/zmk/app/tests/transparent/normal/native_posix.keymap new file mode 100644 index 00000000..94d7539c --- /dev/null +++ b/zmk/app/tests/transparent/normal/native_posix.keymap @@ -0,0 +1,8 @@ +#include +#include +#include +#include "../behavior_keymap.dtsi" + +&kscan { + events = ; +}; \ No newline at end of file diff --git a/zmk/app/west.yml b/zmk/app/west.yml new file mode 100644 index 00000000..cba53ab0 --- /dev/null +++ b/zmk/app/west.yml @@ -0,0 +1,40 @@ +manifest: + remotes: + - name: zephyrproject-rtos + url-base: https://github.com/zephyrproject-rtos + - name: petejohanson + url-base: https://github.com/petejohanson + - name: microsoft + url-base: https://github.com/microsoft + projects: + - name: zephyr + remote: petejohanson + revision: zmk-v2.3.0-with-fixes + import: + # TODO: Rename once upstream offers option like `exclude` or `denylist` + name-blacklist: + - ci-tools + - hal_atmel + - hal_altera + - hal_cypress + - hal_infineon + - hal_microchip + - hal_nxp + - hal_openisa + - hal_silabs + - hal_xtensa + - hal_st + - hal_ti + - loramac-node + - mcuboot + - mcumgr + - net-tools + - segger + - openthread + - edtt + - trusted-firmware-m + - name: uf2 + remote: microsoft + path: tools/uf2 + self: + path: zmk diff --git a/zmk/docs/.eslintignore b/zmk/docs/.eslintignore new file mode 100644 index 00000000..b7dab5e9 --- /dev/null +++ b/zmk/docs/.eslintignore @@ -0,0 +1,2 @@ +node_modules +build \ No newline at end of file diff --git a/zmk/docs/.eslintrc.js b/zmk/docs/.eslintrc.js new file mode 100644 index 00000000..e1ef0302 --- /dev/null +++ b/zmk/docs/.eslintrc.js @@ -0,0 +1,29 @@ +module.exports = { + env: { + browser: true, + commonjs: true, + es2021: true, + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:mdx/recommended", + "prettier", + "prettier/react", + ], + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + ecmaVersion: 2021, + sourceType: "module", + }, + plugins: ["react"], + rules: {}, + settings: { + react: { + version: "detect", + }, + }, +}; diff --git a/zmk/docs/.gitignore b/zmk/docs/.gitignore new file mode 100644 index 00000000..b2d6de30 --- /dev/null +++ b/zmk/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/zmk/docs/.nvmrc b/zmk/docs/.nvmrc new file mode 100644 index 00000000..1a2f5bd2 --- /dev/null +++ b/zmk/docs/.nvmrc @@ -0,0 +1 @@ +lts/* \ No newline at end of file diff --git a/zmk/docs/.prettierignore b/zmk/docs/.prettierignore new file mode 100644 index 00000000..d6fb34a7 --- /dev/null +++ b/zmk/docs/.prettierignore @@ -0,0 +1,3 @@ +node_modules +build +.docusaurus \ No newline at end of file diff --git a/zmk/docs/.prettierrc.js b/zmk/docs/.prettierrc.js new file mode 100644 index 00000000..2a1f0b48 --- /dev/null +++ b/zmk/docs/.prettierrc.js @@ -0,0 +1,3 @@ +module.exports = { + endOfLine: "auto", +}; diff --git a/zmk/docs/README.md b/zmk/docs/README.md new file mode 100644 index 00000000..fab8b874 --- /dev/null +++ b/zmk/docs/README.md @@ -0,0 +1,29 @@ +# Website + +This website is built using [Docusaurus 2](https://v2.docusaurus.io/), a modern static website generator. + +## License + +The ZMK Documentation is licensed [CC-BY-NC-SA](http://creativecommons.org/licenses/by-nc-sa/4.0/). + +### Installation + +``` +$ npm ci +``` + +### Local Development + +``` +$ npm start +``` + +This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ npm build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. diff --git a/zmk/docs/blog/2020-05-24-wip.md b/zmk/docs/blog/2020-05-24-wip.md new file mode 100644 index 00000000..9b81bdff --- /dev/null +++ b/zmk/docs/blog/2020-05-24-wip.md @@ -0,0 +1,13 @@ +--- +title: WIP +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [keyboards, firmware, oss, ble] +--- + +This blog is a work-in-progress as I work on basic docs + blog on this nascent keyboard firmware. + +As is, there are more features _missing_ from ZMK than features it has. As always with pre-alpha software, +if something breaks, you get to keep both halves! (especially if it is a split KB) diff --git a/zmk/docs/blog/2020-08-12-zmk-sotf-1.md b/zmk/docs/blog/2020-08-12-zmk-sotf-1.md new file mode 100644 index 00000000..b5b2046d --- /dev/null +++ b/zmk/docs/blog/2020-08-12-zmk-sotf-1.md @@ -0,0 +1,52 @@ +--- +title: "ZMK State Of The Firmware #1" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the first ZMK "State Of The Firmware"! + +With interest and Discord activity growing, it seemed important to lay out the progress made recently, current major bugs/showstoppers, and planned next steps. + +## Recent Activity + +There's been lots of various activity in ZMK land! + +- [Nicell](https://github.com/Nicell) (nice!nano creator) contributed initial [RGB Underglow](/docs/feature/underglow) ([#64](https://github.com/zmkfirmware/zmk/pull/64)) support to ZMK. +- Tons of [documentation](/docs) work. +- Refactoring ([#73](https://github.com/zmkfirmware/zmk/pull/73), [#74](https://github.com/zmkfirmware/zmk/pull/74)) of [keymaps](/docs/feature/keymaps) to make them simpler for users. +- Mod-Tap Behavior (docs coming!) is much improved ([#69](https://github.com/zmkfirmware/zmk/pull/69)) and usable now. +- An initial [`setup.sh`](http://localhost:3000/docs/user-setup#user-config-setup-script) script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you. +- Corne shield ([#80](https://github.com/zmkfirmware/zmk/pull/80)) shield definition was added. +- Initial [encoder](/docs/feature/encoders) support ([#61](https://github.com/zmkfirmware/zmk/pull/61)) was added. + +## Bugs and Showstoppers + +Despite the flurry of activity, there are still some serious bugs and show stoppers that potential ZMK users should be aware of: + +- [Bluetooth Related](https://github.com/zmkfirmware/zmk/issues/58) - There are several key bugs and fixes needed, including one complete show stopper: + - Fully working split wireless is not working. In particular, both split halves can properly pair, but once they do so, pairing with the _central_ host will not work. Workaround: You can currently have both halves pair, and use USB on the central side (Left side right now for Kyria, Corne, Lily58) and receive HID events over USB. - Fixed in 8b61beb. + - BT bond information is not currently stored to the devices, so after powering off or restarting your device, users need to re-pair +- USB - There is one important USB related bug which is a showstopper: + - The Zephyr USB stack does not have a built in queue for endpoint data being written. As a result, HID events sent by ZMK are sometimes dropped, or lost. - Fixed by careyk007 in #93. + +## Next Steps + +There's plenty of places to go next! To help keep folks in the loop for what's next, I've created a [Core Functionality](https://github.com/zmkfirmware/zmk/projects/1) project/kanban board in GitHub, where users should be able to get some visibility into items being focused on. + +Of course, at the top of that list currently is the above bugs/showstoppers, and then from there, I hope to: + +- Work on power management. +- Improve our documentation on various aspects of the system, mostly around: + - End user documentation for understanding how to use ZMK, better installation docs, etc. + - Developer focused documentation, so interested contributors can start building out more behaviors and ZMK functionality. +- Implement true "hold" detection, useful for several behaviors such as Mod-Tap and Layer-Tap. +- Hopefully acquire a proper and official USB Product ID for use for the project. +- Fun things that come up along the way! + +## Thanks! + +A big thanks for everyone who has shown interest in the project, tested things, asked questions, and contributed PRs ([Nicell](https://github.com/Nicell), [CrossR](https://github.com/CrossR), [careyk007](https://github.com/careyk007)). diff --git a/zmk/docs/blog/2020-09-21-zmk-sotf-2.md b/zmk/docs/blog/2020-09-21-zmk-sotf-2.md new file mode 100644 index 00000000..06c64f02 --- /dev/null +++ b/zmk/docs/blog/2020-09-21-zmk-sotf-2.md @@ -0,0 +1,106 @@ +--- +title: "ZMK State Of The Firmware #2" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the second ZMK "State Of The Firmware" (SOTF)! + +This update will cover all the major activity since [SOTF #1](/blog/2020/08/12/zmk-sotf-1), preparations for the upcoming +Hacktoberfest activity, and a current open call for community feedback on a ZMK mascot. + +## Recent Activity + +So much going on in ZMK! + +- Added a new generic [Hold Tap behavior](https://zmkfirmware.dev/docs/behavior/hold-tap) + in [#146](https://github.com/zmkfirmware/zmk/pull/146) which now powers mod-tap, layer-tap, etc. - [okke-formsma] +- [BLE profile/connection management](https://zmkfirmware.dev/docs/behavior/bluetooth) + in [#133](https://github.com/zmkfirmware/zmk/pull/133) - [petejohanson] +- Integration tests were added to automate testing of behaviors in [#131](https://github.com/zmkfirmware/zmk/pull/131) by [BrainWart] & [petejohanson] +- [Toggle layer behavior](https://zmkfirmware.dev/docs/behavior/layers#toggle-layer), e.g. `&tog LOWER`, in + [#98](https://github.com/zmkfirmware/zmk/pull/98) - [BrainWart] +- Key fix for dropped press/release over HID [#93](https://github.com/zmkfirmware/zmk/pull/93)/[#96](https://github.com/zmkfirmware/zmk/pull/96) - [careyk007](https://github.com/careyk007) & [petejohanson] +- Code formatting standardized using `clang-format` in [#183](https://github.com/zmkfirmware/zmk/pull/183) - [petejohanson] +- [Bootloader reset behavior](https://zmkfirmware.dev/docs/behavior/reset#bootloader-reset), e.g. `&bootloader`, in [#116](https://github.com/zmkfirmware/zmk/pull/116) - [petejohanson] +- Various bug fixes and documentation + +## New Shields + +- QAZ in [#130](https://github.com/zmkfirmware/zmk/pull/130) - [tominabox1](https://github.com/tominabox1) +- Iris in [#151](https://github.com/zmkfirmware/zmk/pull/151) - [kurtis-lew](https://github.com/kurtis-lew) +- RoMac 2.1 in [#122](https://github.com/zmkfirmware/zmk/pull/122) - [bmcgavin](https://github.com/bmcgavin) +- Sofle in [#118](https://github.com/zmkfirmware/zmk/pull/118) - [CrossR](https://github.com/CrossR) +- splitreus62 in [#92](https://github.com/zmkfirmware/zmk/pull/92) - [Na-Cly](https://github.com/Na-Cly) + +## New Boards + +- DZ60RGB rev1 in [#166](https://github.com/zmkfirmware/zmk/pull/166) - [Nicell] +- nrfMicro in [#101](https://github.com/zmkfirmware/zmk/pull/101) - [okke-formsma] +- BlueMicro840 [#91](https://github.com/zmkfirmware/zmk/pull/91) - [Na-Cly](https://github.com/Na-Cly) + +## Hacktoberfest Preparation + +[Hacktoberfest](https://hacktoberfest.digitalocean.com/) is a yearly celebration of open source, +which encourages participation in OSS, especially from new contributors. + +The ZMK contributors have been busy preparing for folks to join in on the fun by contributing to +ZMK! + +- There is now a basic [Contributing Guide](https://github.com/zmkfirmware/zmk/blob/main/CONTRIBUTING.md) to help newcomers get oriented, and get up to speed. +- The [`Hacktoberfest`](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3AHacktoberfest) + issue label will help participants discover good issues to work on. + (The existing [`good first issue`](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) label also helps with this) + +We're looking forward to the launch of Hacktoberfest! + +## Mascot Selection Feedback + +The ZMK project would like to settle on a mascot! We're soliciting community feedback as part of +the process before a final mascot is selected. + +The current mascots up for consideration are: + +- Griffin +- Peregrine Falcon +- Zapata Wren +- Zorro (south american fox) + +If you're interested in helping with the decision, head over to [Issue #195](https://github.com/zmkfirmware/zmk/issues/195) and add a reaction! + +## Coming Soon! + +There still lots of activity in ZMK, and plenty of exciting upcoming changes. + +- Improved modifier infrastructure, including "shifted keycodes" - [okke-formsma] +- Battery percentage reporting over BLE - [Nicell] +- Complete defines for HID keycodes/usage IDs - [innovaker](https://github.com/innovaker) +- Additional core BLE connection/bond management work - [petejohanson] +- Improved power management - [petejohanson], [Nicell] +- One shot mod/layer behaviors - [okke-formsma] + +## Statistics + +Some statistics of interest for ZMK: + +- GitHub + - 115 Closed PRs + - 64 Stars + - 48 Forks +- Discord Chat + - 186 total registered +- Website (last 30 days) + - 7.4K page views + - 474 new users + +## Thanks! + +Thanks again to the numerous contributors and users who have made working on ZMK such a pleasure! + +[okke-formsma]: https://github.com/okke-formsma +[nicell]: https://github.com/Nicell +[petejohanson]: https://github.com/petejohanson +[brainwart]: https://github.com/BrainWart diff --git a/zmk/docs/blog/2020-10-03-bootloader-fix.md b/zmk/docs/blog/2020-10-03-bootloader-fix.md new file mode 100644 index 00000000..8a9fd7f8 --- /dev/null +++ b/zmk/docs/blog/2020-10-03-bootloader-fix.md @@ -0,0 +1,195 @@ +--- +title: Fixing the Mysterious Broken Bootloader +author: Nick Winans +author_title: Contributor +author_url: https://github.com/Nicell +author_image_url: https://avatars1.githubusercontent.com/u/9439650 +tags: [bootloader, keyboards, firmware, oss, ble] +--- + +Recently I was able to fix the "stuck in the bootloader" issue in +[#322](https://github.com/zmkfirmware/zmk/pull/322) that had been plaguing us +for quite some time. I want to go over what the issue was, how the issue was +diagnosed, and how it was fixed. + +## Background + +What exactly is the "stuck in the bootloader" issue? Seemingly randomly, users' +keyboards would suddenly stop working and when they would reset their keyboard +they would get put into the bootloader instead of back into the firmware. This +would require the user to re-flash the firmware again to get into the firmware. +That wouldn't be so bad except for the fact that once this occurs, every reset +would require the user to re-flash the firmware again. The only way to really +fix this issue was to re-flash the bootloader itself, which is a huge pain. + +Going into this, all we knew was that this issue was most likely introduced +somewhere in the [#133](https://github.com/zmkfirmware/zmk/pull/133), which +added Bluetooth profile management. We've had quite a few attempts at trying to +recreate the issue, but we never were able to get it to happen consistently. + +## Diagnosing the issue + +This issue had been happening sporadically for the past month, and I finally +decided to dig in to see what was going on. We started in the Discord and +discussed what was common between all of the people who have experienced this +issue. Everyone who had this issue reported that they did quite a bit of profile +switching. This lined up with the possible connection to the Bluetooth profile +management pull request. + +### Pinpointing the cause + +I had a hunch that this was related to the settings system. The settings system +is used by profile Bluetooth switching, and the settings system works directly +with the system flash. Based on this hunch, I tried spamming the RGB underglow +cycle behavior on my main keyboard. Sure enough after a couple minutes, I got +stuck in the bootloader. I was even able to reproduce it again. + +This was an important discovery for two reasons. First, I was able to recreate +the issue consistently, which meant I could set up logging and more closely +monitor what the board was doing. Second, this more or less proved that it was +specifically the settings system at fault. Both Bluetooth profile switching and +RGB underglow cycling trigger it, and the one common piece is they save their +state to settings. + +### Settings system overview + +To understand what's going wrong, we first need to understand how the settings +system works. Here's a diagram to explain the flash space that the settings +system holds for our nRF52840 based boards (nice!nano, nRFMicro, BlueMicro). + +![Settings Diagram](https://i.imgur.com/DF2t3Oq.png) + +The settings flash space lives at the end of the flash of the chip. In this case +it starts at `0xF8000` and is `0x8000` bytes long, which is 32KB in more +comprehensible units. Then due to the chip's architecture, this flash space is +broken into pages, which are `0x1000` bytes in size (4KB). + +The backend that carries out the settings save and read operation in ZMK is +called NVS. NVS calls these pages sectors. Due to how flash works, you can't +write to the same bytes multiple times without erasing them first, and to erase +bytes, you need to erase the entire sector of flash. This means when NVS writes +to the settings flash if there's no erased space available for the new value, it +will need to erase a sector. + +### Logging discoveries + +So first I enabled logging of the NVS module by adding +`CONFIG_NVS_LOG_LEVEL_DBG=y` to my `.conf` file. I repeated the same test of +spamming RGB underglow effect cycle and the resulting logs I got were this: + +``` +[00:00:00.000,671] fs_nvs: 8 Sectors of 4096 bytes +[00:00:00.000,671] fs_nvs: alloc wra: 3, f70 +[00:00:00.000,671] fs_nvs: data wra: 3, f40 +// A bunch of effect cycle spam +[00:02:34.781,188] fs_nvs: Erasing flash at fd000, len 4096 +// A bunch more effect cycle spam +[00:06:42.219,970] fs_nvs: Erasing flash at ff000, len 4096 +// A bunch more effect cycle spam +// KABOOM - bootloader issue +``` + +So at start up, we can see that the 8 sectors of 4KB are found by NVS properly, +however, I wasn't sure what the second and third lines meant, but we'll get back +to that. Nonetheless the next two logs from NVS showed erasing the sector at +`0xFD000` and then erasing the `0xFF000` sector. + +![Erased Sectors](https://i.imgur.com/DmLycMJ.png) + +It's really odd that the third to last sector and the last sector are erased, +and then shortly after the bootloader issue is hit. I really had no explanation +for this behavior. + +### Reaching out to Zephyr + +At this point, I nor anyone else working on the ZMK project knew enough about +NVS to explain what was going on here. [Pete +Johanson](https://github.com/petejohanson), project founder, reached out on the +Zephyr Project's Slack (ZMK is built on top of Zephyr if you weren't aware). +Justin B and Laczen assisted by first explaining that those `alloc wra` and +`data wra` logs from earlier are showing what data NVS found at startup. + +More specifically, `data wra` should be `0` when it first starts up on a clean +flash. As we can see from my earlier logging on a clean flash I was instead +getting `f40`. NVS is finding data in our settings sectors when they should be +blank! We were then given the advice to double check our bootloader. + +### The Adafruit nRF52 Bootloader + +Most of the boards the contributors of ZMK use have the [Adafruit nRF52 +Bootloader](https://github.com/adafruit/Adafruit_nRF52_Bootloader), which allows +for extremely easy flashing by dragging and dropping `.uf2` files onto the board +as a USB drive. Every bootloader takes up a portion of the flash, and in the +README explains that the first `0x26000` is reserved for the bootloader with the +nRF52840, and we've properly allocated that. + +However, there isn't a full explanation of the flash allocation of the +bootloader in the README. There's a possibility that the bootloader is using +part of the same flash area we're using. I reached out on the Adafruit Discord, +and [Dan Halbert](https://github.com/dhalbert) pointed me towards the [linker +map](https://github.com/adafruit/Adafruit_nRF52_Bootloader/blob/master/linker/nrf52840.ld) +of the nRF52840. Let's take a look. + +``` +FLASH (rx) : ORIGIN = 0xF4000, LENGTH = 0xFE000-0xF4000-2048 /* 38 KB */ + +BOOTLOADER_CONFIG (r): ORIGIN = 0xFE000 - 2048, LENGTH = 2048 + +/** Location of mbr params page in flash. */ +MBR_PARAMS_PAGE (rw) : ORIGIN = 0xFE000, LENGTH = 0x1000 + +/** Location of bootloader setting in flash. */ +BOOTLOADER_SETTINGS (rw) : ORIGIN = 0xFF000, LENGTH = 0x1000 +``` + +Here's a diagram to show this a bit better. + +![Adafruit Bootloader Diagram](https://i.imgur.com/TEOA31m.png) + +We've found the issue! As you can see from the red bar (representing our +settings flash area), we've put the settings flash area _right on top_ of the +Adafruit bootloader's flash space. Oops! + +This also shines some light on why NVS erased `0xFD000` and `0xFF000` sectors. +It's possible there was no flash written to `0xFD000` because the bootloader +didn't use up all of that space it has, and then there possibly weren't any +bootloader settings set yet, so `0xFF000` could be used and erased by NVS too. + +After erasing `0xFF000`, NVS probably next erased a rather important part of the +bootloader that resulted in this issue at hand. In my opinion, we're pretty +lucky that it didn't delete an even more vital part of the bootloader. At least +we could still get to it, so that we could re-flash the bootloader easily! + +## The solution + +Now that we've found the issue, we can pretty easily fix this. We'll need to +move the settings flash area back so that it doesn't overlap with the +bootloader. First we calculate the size of the of flash area the bootloader is using. + +``` +0x100000 (end of flash) - 0x0F4000 (start of bootloader) = 0xC000 (48KB) +``` + +So the bootloader is using the last 48KB of the flash, this means all we need to +do is shift back the settings area and code space `0xC000` bytes. We'll apply +this to all of the `.dts` files for the boards that were affected by this issue. + +```diff + code_partition: partition@26000 { + label = "code_partition"; +- reg = <0x00026000 0x000d2000>; ++ reg = <0x00026000 0x000c6000>; + }; + + +- storage_partition: partition@f8000 { ++ storage_partition: partition@ec000 { + label = "storage"; +- reg = <0x000f8000 0x00008000>; ++ reg = <0x000ec000 0x00008000>; + }; +``` + +And with those changes, we should no longer run into this issue! In the process +of these changes, we lost 48KB of space for application code, but we're only +using around 20% of it anyways. 🎉 diff --git a/zmk/docs/blog/2020-11-09-zmk-sotf-3.md b/zmk/docs/blog/2020-11-09-zmk-sotf-3.md new file mode 100644 index 00000000..8752065b --- /dev/null +++ b/zmk/docs/blog/2020-11-09-zmk-sotf-3.md @@ -0,0 +1,156 @@ +--- +title: "ZMK State Of The Firmware #3" +author: Pete Johanson +author_title: Project Creator +author_url: https://gitlab.com/petejohanson +author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110 +tags: [SOTF, keyboards, firmware, oss, ble] +--- + +Welcome to the third ZMK "State Of The Firmware" (SOTF)! + +This update will cover all the major activity since [SOTF #2](/blog/2020/09/21/zmk-sotf-2). This edition comes a bit later than planned, but the amount of features and changes will hopefully make it worth it! + +## Recent Activity + +Here's a summary of the various major changes since last time, broken down by theme: + +### Keymaps/Behaviors + +Tons of activity related to keymaps, so we'll go into more detail this time. + +#### Codes Overhaul + +[innovaker] _completely_ overhauled the set of available codes for keymaps, and simultaneously has created +_beautiful_ [documentation](/docs/codes) to help users visualize the codes, and also understand if they are supported on their particular operating system. + +This also laid the foundation for the other keymap related changes that are now available. + +#### Modified (Shifted) Codes + +[okke-formsma] added the ability to apply modifiers to a code, e.g.: + +``` +&kp LC(C) +``` + +which sends `Control + c` when pressed. This feature is often used on smaller keyboards to achieve "shifted keycodes", e.g. `LS(N1)` to send a `!`. +To make this easier, in addition to all the normal codes, we now have defines for common shifted codes, e.g. `EXCL` for `!`, `AT` for `@`, etc. + +To learn more, check out the [Modifiers](/docs/codes/modifiers) documentation. + +#### Simplified Key Press Behavior + +In previous versions of ZMK, users needed to be careful to select between the `&kp` and `&cp` behaviors in their keymaps, depending on +whether the particular keycode they wanted to send was in the "HID consumer page" or not. Forcing users to understand the difference and get +this right was awkward and error prone. + +[petejohanson] and [innovaker] have reduced this complexity. Users can now simply use `&kp` with all available codes and ZMK will +handle sending the right events to the connected host. + +### Power Management + +Several important power management features have been added to ZMK, helping save power for many use cases. + +#### BLE Battery Level Reporting + +[Nicell] added the necessary [driver](https://github.com/zmkfirmware/zmk/pull/293) and [core code](https://github.com/zmkfirmware/zmk/pull/306) to send BLE battery level notifications to hosts that support displaying them. Testing seems to show this works with Windows and GNOME, but macOS does not display the battery info. + +#### External Power Control + +[megamind4089] added a new [driver](https://github.com/zmkfirmware/zmk/pull/242) and [behavior](https://github.com/zmkfirmware/zmk/pull/258) to allow users to toggle (on/off) the external power supplied by boards such as the nRFMicro +and nice!nano that have specialized hardware for this purpose. + +With this change, you can add + +``` +&ext_power EP_TOG +``` + +to toggle (on/off) the power to external hardware like RGB underglow or OLEDs. Check out the [external power control](/docs/behavior/power#external-power-control) docs for more info. + +#### Deep Sleep + +[petejohanson] has contributed the initial [deep sleep](https://github.com/zmkfirmware/zmk/pull/211) support to ZMK. This work also +included some automatic power savings by switching to PORT events on the nRF52 chips, which reduces the idle power draw, even without deep sleep. Deep sleep is currently not turned on by default, but will be soon. + +### Miscellaneous + +#### Output Selection + +[joelspadin] added [output selection](/docs/behavior/outputs) to allow selecting whether to send output over USB or BLE if both are connected. This should now help avoid having "double keypresses" when your keyboard is plugged into a host. + +#### Bootloader Corruption Fix + +[Nicell] has already [blogged about this](/blog/2020/10/03/bootloader-fix), but for those that missed it, a _major_, and incredibly difficult to pin down bug involving corruption of the bootloader on devices using the Adafruit nRF52 bootloader has been fixed by [Nicell]. If you've encountered this bug, flashing the latest firmware should prevent it from reoccurring. Unfortunately, due to the nature of this fix, you will need to re-pair your keyboard with your hosts, as the fix involves changing where settings are stored in the flash of the controller. + +#### Official USB Product ID + +[petejohanson] has gotten an official [USB product ID](https://github.com/openmoko/openmoko-usb-oui/pull/15) assigned to the ZMK Firmware. For anyone looking to uniquely identify a USB device running the ZMK Firmware, you can match on: + +- Vendor ID: `0x1d50` +- Product ID: `0x615e` + +We are incredibly grateful that Openmoko Inc., in the wake of discontinuing the openmoko projects, has made this an option for OSS projects. + +#### Development: Remote Docker Container Integration + +[idan](https://github.com/idan) contributed [VSCode devcontainer integration](https://github.com/zmkfirmware/zmk/pull/209) to make it easier for developers to build and develop ZMK without having to do complicated local toolchain setup and configuration. This also opens up some amazing future flexibility for things like [GitHub Codespaces](https://twitter.com/ZMKFirmware/status/1315760616779505678?s=20). + +There's some follow up tweaks necessary for better supporting using this with user config repositories, which will be available soon. + +## New Shields + +- Reviung41 in [#297](https://github.com/zmkfirmware/zmk/pull/297) - [Nicell] +- Boardsource 3x4 in [#296](https://github.com/zmkfirmware/zmk/pull/296) - [neegool](https://github.com/neegool) +- NIBBLE in [#292](https://github.com/zmkfirmware/zmk/pull/292) - [jaygreco](https://github.com/jaygreco) +- Microdox in [#245](https://github.com/zmkfirmware/zmk/pull/245) - [careyk007](https://github.com/careyk007) +- MakerDiary M60 in [#233](https://github.com/zmkfirmware/zmk/pull/233) - [megamind4089] +- TGX4 in [#226](https://github.com/zmkfirmware/zmk/pull/226) - [mubeenkhan94](https://github.com/mubeenkhan94) +- Quefrency V1 in [#216](https://github.com/zmkfirmware/zmk/pull/216) - [noar-t](https://github.com/noar-t) +- Cradio in [#224](https://github.com/zmkfirmware/zmk/pull/224) - [davidphilipbarr](https://github.com/davidphilipbarr) +- Romac+ in [#198](https://github.com/zmkfirmware/zmk/pull/198) - [reizero00](https://github.com/reizero00) + +## New Boards + +- MakerDiary nRF52840 M.2 Module in [#233](https://github.com/zmkfirmware/zmk/pull/233) - [megamind4089] + +## Testing + +There has been an _amazing_ amount of testing from various users as we develop new features. In particular, we'd like to give a shout out to [tominabox1](https://github.com/tominabox1) who has been tireless in providing detailed and thorough testing of +changes as they are being developed. + +## Coming Soon! + +Some items listed in the last coming soon section are still under active development. + +- OLED work, including battery and USB/BLE connection status - [petejohanson] +- One shot mod/layer behaviors - [okke-formsma] +- A power profiler page for the website, to help users estimate their battery life for a given keyboard - [Nicell] +- A keymap converter to automatically update keymaps to the new codes and use of `&kp` everywhere - [joelspadin] + +## Statistics + +Some statistics of interest for ZMK: + +- GitHub (lifetime stats) + - 210 Closed PRs + - 116 Stars + - 101 Forks +- Discord Chat + - 363 total registered +- Website (last 30 days) + - 8.5K page views + - 766 new users + +## Thanks! + +Thanks again to the numerous contributors and users who have made working on ZMK such a pleasure! + +[okke-formsma]: https://github.com/okke-formsma +[nicell]: https://github.com/Nicell +[petejohanson]: https://github.com/petejohanson +[brainwart]: https://github.com/BrainWart +[innovaker]: https://github.com/innovaker +[megamind4089]: https://github.com/megamind4089 +[joelspadin]: https://github.com/joelspadin diff --git a/zmk/docs/docs/assets/dev-setup/vscode_devcontainer.png b/zmk/docs/docs/assets/dev-setup/vscode_devcontainer.png new file mode 100644 index 0000000000000000000000000000000000000000..e5c22b0ac4f8080f47725e570a6bdca990470627 GIT binary patch literal 20773 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/env-var/env_var.png b/zmk/docs/docs/assets/env-var/env_var.png new file mode 100644 index 0000000000000000000000000000000000000000..77ebbc5b82a55ad02d4de83a3bcc6e233c4fc3e4 GIT binary patch literal 17317 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/env-var/gnuarmemb.png b/zmk/docs/docs/assets/env-var/gnuarmemb.png new file mode 100644 index 0000000000000000000000000000000000000000..42e38ec14bd510665141cc70f5e3d54d434e9ad7 GIT binary patch literal 7914 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 cbot+4SZ;auyKYQ*HQUCw| literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/env-var/start_menu.png b/zmk/docs/docs/assets/env-var/start_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..fc7d9b5eac705df2d48502f51ae45a05f143ac76 GIT binary patch literal 51108 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/features/keymaps/layer-diagram.png b/zmk/docs/docs/assets/features/keymaps/layer-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..7b42daae87c7ac600d39c81252f7f1ab932ac334 GIT binary patch literal 53975 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

v=mX|&cA`aBl<}f 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

PS-t8+}tN=<%$fuLj)8^>@g5<-1abqat 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg b/zmk/docs/docs/assets/pro-micro/pro-micro-pins-labelled.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f72d407719e9ff4d20ed45d93d12dead8caa9da5 GIT binary patch literal 115573 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 DB^7&W literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/troubleshooting/filetransfer/linux.png b/zmk/docs/docs/assets/troubleshooting/filetransfer/linux.png new file mode 100644 index 0000000000000000000000000000000000000000..c192dfab8fe4cf1de2d9324fde1eebdc3789900c GIT binary patch literal 40111 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 K-1SHt4qw0YvK zKP>!>Xk%-u8faH#=;zm1V%iM3=u(S0wsZ+9-v!N8H+eHrrFg`bj*cYPrx848hQDLrtq4~f6++39!a9?5Bga1X% zqD%_n0EaFQOaE=>{{#|BI0~EjN!h=nnZGPSnGiHr^grg~13EZ7G|tyIU!$!TJ0ZqE3BHxTVl=46jH4Zr#JzuK(c!5F{yd1}h;+B~^Z^GN4o{x&8Hj1~{?{rO$_1&eMp1Cruxh>6U+IdW*-AEY z=6!1UQ~mcg`}^}j=AY{TFXsq25+SD<0f%&6D@2K5b)R#~WgnbiozD s6yremh$rlNrBw!%Hq(IW@cR|IqqMH+OVD`db!TWrIaS%x2j(IF2R8r@?f?J) literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/troubleshooting/filetransfer/windows.png b/zmk/docs/docs/assets/troubleshooting/filetransfer/windows.png new file mode 100644 index 0000000000000000000000000000000000000000..91cb8a616bba9d7d8a340d9932822369fe154dac GIT binary patch literal 12077 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 HgJ1s*xk{lE literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/troubleshooting/keymaps/errorscreen.png b/zmk/docs/docs/assets/troubleshooting/keymaps/errorscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..73b5b58487eb96ac22651edbf0fb9f90ca198eb9 GIT binary patch literal 186351 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�oN3TeHS02;_erTgMa_v{ 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 z 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�Ji0$nC~tz*fHIHQloRKRkvR*xT068 z2OH1ydITs-W$HfvzSapMRRb-hQ?3uXcjTjbWu!xbC0iq%A!QzDW4YeMvK$zG>#Wgj z+pwsK&(ZK^7;X|2=lkOGk7A@gT!Wd^k2%YHcSu2l3EpzYtH+V0hp-T}{RCFd#RoLz zf@9r`m*%|LtwPeX=mkb@(I+~1^)X0HAtZD2&DU&$e}J#1H)e*e-49bpx&WGUvsQQ; z4Wgp5pKzyJKx6aGUc4RFAUWF*0(~B6Gp!w-lo+NVY^XVB+!3SGXQiryIMj4NHJ3 z($chgmJNE2N~L#ZTL0ppqPv2rxEZ{-vePYF?Q*fqmB^LJo7@9oMH6*t8N-Q>oY6%S zd&G8F=f;)hv&3nsxf$0Ht2O*nt7>MIE;&10 zaGYLP^gewQjOF(3CNp7cxOQ+AWF$1Pon5ZjvR^SBc|MY$9uC!kF3ce(<8n$-I>P&- zX?{wAm{Ho4+35=><0!q?RazoUi=~e{@w74-qx!Ror;o!gs?ii@?Yaxfx~ex?6;VDovnL7_Sv;+b$1fE6E@lT`&+WSVc{Dt^ z6gVaS#lYC|_tW724pQu~+&I(3wg?g-q*^i$H%UX(hCX@1-8$_tA&d$9{k8jzdiVS+ zDL29gq4dK|+?j><{SfJlkQ+p!%OWuj%AU&<(ukAj#?dD7hM3Y*V)D)g?<$K+UI*@pJyLrrt(6{D84m5ggytmi##-&(Bfm zQ;_$P5rz$ntuY&h^C_?UFk)uXOT^on$|GdmDgp;XsG=U@-JNGHgxeG2Pk+kw>wE?~ z&c$-O=RWH!kwn|k(b3Fx((u6Zr_y?M?NZS##H#B7ci!yO>9XwTI(AaCxtvFg1gT#t z%nb={m&HBJ*@z4D{=Iw+s@Jzf{HP={-}iRfC>N^JMZQFJotu3ut$+7?GKx|rd9lrW zSMRdPa7Iq<;J)^`oLxXhp<64h>sc%1MwoTqvx0QpNZSviPmPKU;!9xO zbb~}eg+Z%P!)%`u14)C4@u%NwuWlT#p1CbyuXeFE@FisWghOwl?o6=#d&v9>cD^hk zzp|I?3{5tba=<r&rsA&I~FHbrr0v_@UYtj zDWVHwD(GVM1UhGOH8x>rBWlM{+k-;A&8Hv=(6uhVe3$bi0W9RfwDSsyasFjL{k#;U zu|76EwlbBHp;6rAq%9}oHm7yOy6nD*y}0NO=}V+>pQ>X*ndV*CizDnDLo1~N z#~@)%foUn&k+?nOLl)+egt}$0=J!@3hsGfH32))cs~H;u`tz3tw?-;kWAzN3xYfr*2Y6ElW?uRi^Gq>)Yq)}8ut&^>Yd7S(P4Elxbp)<0P^44bL)3Z3Id zMi6pwC{c+G`*5^kTH32s%+8QC8us2=&OqEN8Ow2Au!8v7Ro`UI%)(}{7|aQ1OBi|^ zrIvie-+%dLc)p(mXvob&uJ_1h$`EN8CH94Iq>pH{xNyLkdqhXFy~9W2i-h6H!W=J( z_D|ycRQ=E{-q5Q2a+T}Wlu7qgz4_5H*&c|j-?LS#aEzT*vT^cDc(jUGO-fp?qu|E_ z(0E9yFmg8KWBu;leteH)N*t7tCt0QW95(PKVOrrpCSu{N?+e-$Rryr2tYUMAv3v8f ztt!ye$|Jd<*46&iih#1GqClzP>V4Ahg<#}&zJxnN87rzNmu*iE&U^JvTu6!$U%<5* z4GacaV0X)ZYOmhO7mb11-}*GWQ_uB7w^X|B2tjeHU*Q9J)D8poUdD@O=w^?L`=l^+ z3+AniH#yTo;JuK-J9hw|Tz7m5acGtl@H6*crL<}=t0~A69EQRwRIVN z#W8|OhrNpLn3x>3f<&qfRX)l;SOJl)G!kcky4U0J9lw%Iby{L_E3(Hi_Ao;y)sV6G zW?~MtRA2ezNFQ+r<-J6$dbhz@*z-`0IyGCj`1zgZ>6{VJWZx-XdFdj8Wn=%`Gq6l? z>(Fr)0%umm>DP(X?j0i$y*|21A`GUkk>NYiW1p&zJ-34}4x*JMX3*8@5NOfDj+H6a zuNq^GxZHUANmcI;-Xy$z5_0c?{3BJy@}~hLBebif?u5(bxv739%;cHz;cZ@5KKI-q zt3aEtI`Q9sb5z%ts8T-B&N6SKLL5x30yAW2}_~tJ0<#JDR6{hCk>k z+kdS*K;@#1KKW$f-B!#bWc_1pUv4YUfjOn#Q-^9odrQprmgb`nBKxB=`O>3Ta-6t~ z)#Udu29k)AYML$9uu8czb+du4_cL;pi(wxF=F~k8x0GJA;MbWVu4lS7bJe2|x95TZ z$MWgiwIVxvD`ibbfwMvG91`V>7q&#MFK*q#_t4~{W9{r_zs~yrG-4`p@T1>X!n%s8 zA4VC9_wK2&w$R2lIV}$m{3IY4d}W{2M$W>Z&8}jlhmUHXncEhR1z3;!UP?7m-PL>M zdXonOOEm3hkA9S|Eu3Wz(QE7PNFWKRWi4dzjlYXYQ`y_=G3%#|xztXL4w4A)Ibk6y z$@XW&cVLs^>n`>L;d7i&B5v(w{+zzO$7xrpMc9y3q>LL>C+_O7Z(si1i_Br&cVXFV z>5ALiU#S6kRw|WSK&SJ5`{5OPB}@A?pPq)akF&4OJdQCBi}d$;r9iJzsF?1Yo}L*r z`rV1X=J;X3XuvLBS@E>Uyi0Bux4zy{o~JzdnMdqNaVzKkf9ulauqHg2uG)mI4_0Uz z<6g}b_=%G_tE?8QfsUw!l5S$~4HDFND>wF97LNTy;ogKt2{|fipAZ`<_(QGv!L!>e z$G1&nvV~zG%NU#jr(5gxvAnge>v7~Q@WE;}pQH-^ztUEMD#z0rZ!R`AwK*HDtTcLE>GUd~)x6Rqz zpAt|9p9fAcyGe2WAuS&706N+soLX%p=PS-wo|Co?;cqp1UJR>fEX7!-^mr@W*g9a9 z3V$}BxC1xjeQ15s4}N-9K|DmTS57Vgd7fIKC@7GD%*=TC1o|j|FiVPh+WZ)wRMc#* zmar;njEi=`=16M!4!TRUm*)Fh#6)52O&y<+N6WHFx@BhEl^5kRFAsOeE#VW&Acnb1 z8}=U)24;RWHnqr}e9TOTcQ*N!!sWWeEi9zwFUKnf9wWn~AV{pid343Abz{%$?9SR% zi=U+T(SHbDitx>Lj+d|Hz51y5d|5EWD*sW`cWu;X5z3EO@#)lM{IPjKEm4Us6NWPvt_3XN`G+TnX{C_fk`h=ZE49QP2)NB$&%8Q z$vO#HTHyRX3MsBTq=xWX6Yjq)AOThczDm z4#zo-s{3J^#yq;L81!nOOjCWX5OMfD?j#P?O6cE-6n>D2l|t_#h$}2vtxujw>}n7p z+%XC2f_DMFc6MUP)a*d?VAXZcjVr!LOuJjpcQv8Xq30y_MN>VWS;TQ$E19G`5FAa& z06^oXKuv2Uz%|B>J(E^@4ADUU;AO@d;qpim-ek;I=2G{TqTUTJfBypN{N=N%?T z+AX2EmeZqFY(1IH5?8sxmh5=|2c;$i6S+8UDYJ*{Z>gs_bzVZelxSUZnL2T2Xt7HQ z9wMmK9)gNpvb?65`tt6`FD`Ise1 z^QSaV6De!Fd7smWfVIE0G#g~dnp!Q^?X4<$OC^2}GoyRc6KQn?c)e!JsP^F81*n@!rRHZw|GbB?bAYB*?{vAjjO{MsiY+}y9}lq zGJ)MdV|0WtWbb@burYeZ7JgH;<+A==oKm3{X6N~IkEYj8ZPKnP^O|k%K6iRUvcY9L zQ=x7CX6|h_x*k#e{2uC)m1>)Y*uMEz`q35{7CIa+7&R-Eez!{}tjg6Gown+B=zZ?0v?O$1KAXhqnn{Ro@iI`d)QTqt9CH`(-aVdJ3Os?m>0tJR>-TWTth#K1iYZgj#Kw& zn*zG9Xh3Dfnn)M|+SxW)H}dG|lAqxM~DV4cgC z7xfQPi@%+N{14j^Sb{i@Rb5tuk0_j4BR06@i6cneg^INOxzzW?+zU)IX*f3c-ObC! zVShaSA)QsfkuUGmKZtby5=Z}Xi2qPl7pZ}h$60~n@hj^28w;?8pYUrKgrAM!)P!rW zE9W#%V!}im(@xTuKX7^fw6O2bGp7?f)hvGg^XnfQe;kQvF~$^oPcMGrx}hyx_+_+5oVN8%nd~&u{<4(cZfje!u>)@FAxS zuebh7*}RzrwC%r?xp96kBKTEQ__lohAN2s&VhOkYG53u^T8JniRmW`M!)Iv)cX%2e zOoL}OaRI>iDTm)}y?;2GG{lWqtD7=~@pgM@@`d`9BEKw2^}4GZQ~O8H{?|?3^3N=F zNoz~KYs?mcrdY@_&LrG&*z)|d#n6uf%Qu<{~%HU z62uzrhS&>5a9Ybp!iUO@tp|s@t*XYSQ{Nt9@5a)fkzQKfzr7Hzcb0hgv|-CyY~M#Vk?|@OlgyOf3$Z{RCv?DPmeM z>>hyJZs)(WJA4E@&dz_|?ay2P;1a$SLqQm-hONyAz_w8? zYx2q0jgFa8aVUJq8eA-7;?o|nal@c}gmOLTHp(XSvm`cH_A3nxHGG<-)r#;?xHCt) z8dzBpV;2t$Z0slSf&2%yHkr6*oAX(GtI$OIWwqikzYp){an0gH>CiPJcqEN1!aK3N z^r`~TEPejvvi|<79Xx|1y2l!`nu}q&zPceEk^*78As|B6A{$$`IU%-B zgdy14;g*h)+k{Gr8HoGE5DT`BZ!+IF02T(Rq zz~lAh{9_lCru-KVW6PGm9~*&ozX#~7O+aTA+aR?2t#5>lc=Q&ZT~1oTPGS%-l-hiu zYR!OX%-JBnPg>!%qT>RSjpd{VV`1%!{tD+RH+E82898|F;n{V%5mr+QsN=wmfg4-@ zs#HV8I}t&izue2s&A%TNL9o+X;G@t2p?nlKH~bC{+8x&HkH6Pe!rEe3PFMi^uaS5t z8;#|D$i_lgv!Rp1S>~I~j&x*p{PAOj%5g?;U0W%oy5iuEuN5|p9I**tq?(9qj?}Tw zBh@BXVpC9x*DUe+qOEI-xXJYY>`n`fAU@bnP#ZT@i3UT@I~l-gA`KZrmq)mU)haZe zA7_n;>zFO0c0xo7?pHA;bp1}P@z(l^sg7uQaJ>FA<<5xyFz_@zMQulvsVp>F1?x zmv?{BPha~2KgSoX|8}2X!h9FS%i5TuTx%5fD?J9t7s-LIn&pq)seUSU`0iO--b0w7 zqEaoxxZe+cmz*xuWPDxV691&`&%X*+-7=VbyApLkLQvw^i8ogF4~O!49f6cTM!C4l z6XV*a-%=ao#bsLcbfB4IG!~UXWsZ9#^0hjAZ6rLL`?WXn;b>?;JrrhdK6@u8V8cqP z4&~$3Tk~QfV2n2Je_*^u)$bRDw!GEYhvK^4^}%04u$wvQ$4?yp@&-Ii`G$YZ^T5|; z&DMlR!oMXfO|@ZeWd~j6lQ->tCiWCo?pmNOBs<<4c2Qf%JLeS5YJT`8Nh<+P4Oh z(A>&8GtDQ*vHn>tn4$a`zhHTE zX?`WzcudKEUJW55kXYs86|cd7+ZEjt(sV+eg|2?^dpG9hnEpivc-WHs?Ck&kurs^Z zD&$9392FG}+`p6v+Q*k@h`8vItYm6n-9>6}W6RRC?9UWsl^h>u-?CGkg2m{Bj`of4 zd;Z?@CRIN#G!J23FS0bHZDtH_HvV_^vf0R275mbqzi953zaMwL6*&yAE#2>ghU{N- z!|C%>=P)Y@ylri1Ec1EpYD%rVr0R4_oAg;%1~vU58wwifA3d;pJdJXSdIh8YE{PX; zPu1gD`isdN?DZbN1qy-nA>bkV) zqQ|0d)xFr^lNAdl9VaID%hJgARFnPJ>%lbqr*$&jf3SrAzD<6;4|Mq^?F0zkJA(i2wb*MMH#oaJ6;zFu0a=m59 zeow=kZi#4Hny-`Ngc8j0|6}hv!DWOMtCqe?DCME$w2uaR{nfH4?%ek(ZGv_+z&*vW@?CfXn zXRmdy`(A53`{7(^L1bpMcc3;@-jBK&n3-F!%vum@y}gfEtbl@dhShqSOdD+{@Ynps z%lJC=AI)U!;!XwwotUy5041@i+$gbZ8Ddpe5W+s-Ve*|8UJD^5y8Ff6!FqmZ?PuE- ztE32nj9Q)an$-yf!hT*@nGCMLW!*dkGY1kz?j0y0?;+Siu)0e-tLk2e(5kw3RoN}8 zt&M+0THcKo%=&#j;eYG-AIN}<(ULzTJR(^)W7{)&o|D-3j z?%-XuTJh_zGz5@Ka{V5^_@1ACj|2fwC2Zo!JT*qC<@&dn7OU)kx)MH?6D~KsU7<5l zIdsXeB_ZYxv*^+4YCy!8%TE!$7SX&6qGVMt?CtyNQnzS(RZE_dt02DO3KOLlu~q`q z=Br@OYR&_tFDHGQjsM>M|D=Nc{Nvy8z=@V-Z%mJQJF!2tOzg%Lugo$>l~?XB$C6>6 zY`i!kpH+u{8R!{6T8)G~S~V4u_-gpMz5U;;ulPHo^FMmmVU|kBMydGSjLk5y0%-)a`WieKkbMe&+{m z->}5L9>4#Ip?;ST{LcwDpU_`cJb!r(0d-YL5tC^ja5%&G$Pl-A|A9K4mtC%=ElJm|NK&KHsE@d7BxflF|Lj^A5|g^iZKArW z^#sR)$~fKUqevX+-X+B_ofy)yjff>h(%EHj2QG_ustbhU>Kd-DeYpqIZ~la<-RA%2 zJn*~oee|f;r)h#WB4p9F1!%p{(>1eZA1!yBaW_xWKhTZMU35mTbNXr z!c&=7_Ir7n%BjIkp{m3=5Jrm?UVc}5(RGX4$F5rHWYzdVDiw$`A9^1tY{l7AMUxJ= zg}s_J@i9^ran?JkFi)UtGIK0?De8hqhdJMz3ZfaFk&mq_pG^zro5CUP#%gw>Gr-HV&Xwj@Z*aMKX546}cV8A3f+G-nqe zSsqg*r65@?=<6xDaQjsNU4EY(TUtVPLr%Af=F`H0OJc`BV=1uQs$4bV;fSDS@I+^b zn$E6lTwV9$jiv_b9nPo)nftDGO^)Bck^B3zY%EJ!bn!52N!a8Qi?Q^jQ5Rf0|CMC{ zX7tx_{pe9#5EJ(ZqoBPD>Pr@ul3et#@U9%5>mDn&U?BF=46?NJCx&e9CsYtp6ZnwX zj0pwM?yCGA7oksufeg%tokp>I_coe7$8Fb&X0ULXT{_g;OLtlrhJFznWdp9^8pudL z=;t%!`+4uFkBrD6dnv+q^f=d!)^mw%D?yX)a7lL3Sk7xwpcFE{*&hyN0HRKZubBl# z0evM(_70N8jUt1%@Ycb+SY|>k|}}glMJ_YvY*XX z87P11%2BIy!f?}Mq$COfmsc0V+1shZzcjvW3sydLzy_IL{kv%NH`Ezw4lCt#Li=YZ z*)gQH_QVoRs8|d+HXs7t;K*4jmRz-u|G>gKU2yYMUMCn-T~RyDG+PbJs?i?<{erDz ze74Wjq)-ei@0Iyj0A|QzHbCEKl9-T+q8W zBL^@IZ2NdU&gwo033K}kv-qt%f7bmUX}4W66(Re{ffHO!V*a4W?vLwd$vy9reZy0n z^waADq=~KP3qwpV!eBLeo^OBu;GQ`>zvLyP;^qxgZd|M$1>&`*nNX0$xK6f(8SB~O z967WQ;zjPx{ztf2>z2A6Fc8~91W97^>VkvIm%>%Vx{9ICy|5oBw*sPuG*ty@d8_I( zjrq;5%kQm?UR{a{nXuv0!4kx>F;m*UD;`J4gcx3*IC3PV_;4Bp(Ta!L&fyV=qxBP^ zvwof}?DC+AL= z$kr5q> zhv&-5Mw4Zb{ld&Km9I}HM7VlA?aP?}+8q9J3hw_&n*WciJY5(v$t=vsxb?MMPJaE` z=IcB7>k9gN>5lI*^6#q1d{gzi|Lz6&iv^{>e)9hpC)`XR1oroqklVv~^^hWB0!#;- z=+I0@l3@IRAxWajC+G-}9J9)=FR17lr`z6MYN&za*J_Lj`$8H*8@+6{*na;8R5o<; z-2wmY-*1CAZ+%@q+V;;XCP2RTii#*Q`wswqIDpO-^1T9`Bsu3A=+~>PXf8}h+;A?J zA-28BDYU)5uolnI-*^piZV?r&{p#Yjy&JjhhyHI@yY=H=HyR)pzTH}vpMk|nMAkY2 zQZszIAAG~Ysf%k%;@4ZKBu9i9#a?QWDTco_k)d5)7c)1$8vf|YzxM6hS32&HA5ngq z^GF>^$fjg zYE-W(m7AHb#hAB_B`3i#;|Ov`rjm0P!l_H_?yCE_G$TsXXTns}@X09tS3hx8&c!2G z?SfoZLos$q?d8-NgE{eCuj3a_qH=&iI1h# z_tB?*?{lx!5E)MGI!J26?Uz82itTqQ_OE)w@!f*pu2qDxg>UGbLp1M|c|XdBGtt=M zM9IdMDhny3_^4HVcMREjw=H+$y?c^YXql9RW?2c!KN#Mcq1AmWEp4()6g-2@W=4nNqKd!^>gg2u(DEA;7$$nZUbQ{|%? zU(zgesd$(C*SGff=Af@vkPDr*kb+Mqv7|V&gW1W8lydi03tmQKkf}`nPi76%hs!3T z=9o=_3XJ9@veo{U0A={3&6v|kFzI~w%}WPvPCM4($$NsPUC=JGL;YsOIaholYJ~NN z5JZwxy;{KO#_;mCYpaTWPDati(vD87iwmc2=092wZnitnZtt_wU$qAnC)1g7{p4Nl z+ohOT7p?<~)SM7(3BJsr9%)pIliWd_uwJC~14r@qBWJ(_&-mK0qn1>y1;>it*V~p2N);@6djQl*& zcP5%QMp~+#{a!EHU_wK53b|e6ne*a}=;GqW(^!U8VGSE_z2Q>8KKK%AtG4F~=`-7J zii4+BA7D8#GFEW)FFj=6=(G1<-|KIG-7@}nVA9wQ7NDv<=odt+LM=lF+xtz5eQG|W z;}>H@IXQD|oz7(KT4shIp2D(?7Fen8izIA2NuNDy(z7%mh4L__e~9}_T`TQ&bR|6hUtm>SERnO z4r0@~WOQ3pn(RU4dvSA(WA_CGmSTK@EzcW>fBDL)cg>^EV*kM$0N#-s5V4jKir7iT z#v>yu193%uyzhGrvK`tvWt1o>2^XWLgx@z|Kgla%Ep{@cEkN*jlo}$T&;{k6*H*aA@mJx%^s+ zq2-lP%%0IHuzsIfW-;o9mE(Yi_et~$?UwMZ>O(sADSBty@iqIWINcj3ymMsMzclhQ zu*HvYUz!3?f9n69J!cAh+w_t&n%BB8T28`FGSuKe{6hGZIq-&pI)ubW%JLmv@-*#nDkJ5Js)RC(rn0&5Bh;7>A+JrC0WygZJ1&C#*R9Y9+k5jvwd;%t*3-r~XNZdceBlVY=Lc+%lZeGmNoHhpr>7l#4AJoVN6 zmI~e?yWx;JFzXqmYXZs(7!IqfqzSV@ml=J|SFzxuPYU|g)t9gqR^TLq71j@NMVL=7 zQ0NVTo{knBaZ3YV#c3P%#OO2X*W>;TX9WzEXWRI6{4=!7E|rsr+E$)mu|S$_DXyMS zv+~t0Z7yZvB746c>vj6~OyRqep{1g+?W5IpJr5%*t@QqS?nO(IZvs{gK<{J}SolkC z`z>Jf+4(O&0_4p<1flxX#o;oNqi*l=nKI4-2DHm!qaB1Pl^gM{k@%YOzU_u-z5OTj z=`Xv@cjxMRhU1xgjCWuG%wZ;Z38>We&xI`;BPw#fV@`|JovF2Ue%M+UrUXmw)i|COyz(uYF zm{hzNezI^yT3>tip&o&F(ESa-*Pg9CQ`)tX4_S0YyFgvvUApK0B)p^wU>r;(cn;kE zLf3d(a%bF9fRJq#@!+k(@~UV*iRY(;f4Bx5mUkyJ<|0XIC*+rpVj6$6Sp8G7#wd3N zFh_x&_R6cTw`8Ir16X^{-o9GO=-ouW4IilCH)eh^~s zho%UlQXP)7`C~j2z5_vP&XUN>Pb@)J;#xnaF{aVeyLt2f`l3IZ%%;&Js z$2hVP3_zIsQW9Y^Qh~wtZnM#1A=<(pTDy6NPg3LohGhdedWJU-fjd!yf2m=i{HP*_ zcyRPG@64z17^%f z?|5ITco&6)$@sl_0y7N2O{&KYmF+S=uD^YMx z-K8{`>hq2iFyG|6_ojoE{&Gf=T~S~T8z43zF8U`8%aQkb$O_mGtP6o^;EZWrDNDKS zdSis$4Z8q)Dgs6Jmu_I&tdWdJO&PH%_?v(}fBRO+u zqU@~y1KVr9f~x)V6v^f(mOy052D`Pvy_Jnslt>IOIi|7Wwj15@+-ZU9sWHF(3LIz( zBORhaqd!>w*msoo4@g1Bh<7P}jU<0VHT?%?%KTuSB6x~-S z*=&nw0e{yf^9sOQYTtPB@p5;$ulA- zz&+4%l4^1KC4eHYnuDm*)zPP24bkvPJODV5Sl)n;5vUYYj4AIezoX%!SW zR&zC;RmEW0fzsveblTS&*Vlg&lSNzc4}eHbyiA3Fva)wm+gxbwZ#PeFW^hy^RRZQK4!p}cb5ORbp9A()a3N~c z_6MRe9QXK^>>(ZMfkxZ$%p4M#0^Rr0@Cz*NxNl_4eo|+PFb}QNb>F zAO+l4Ibe4J^IfxV34QCE&##bpL|IzfG=?q#erbmHH|2+Ko_E*Gp#gfFO-&bXfE)iS zY*v^4UMo$>A>)bmvs-pJBtJ1adFz`r@Bazu;tCk)FMpn)=xwwK0E>9>9Bl4U7EI29 zHt@bqYT~xZizvDjhrXHd$aUvUV!9olrFtO_OyR5-`ht6PV{DB`3~@f{^r7a#6ho(@ z0%*$=X{lr-L`EhYQmu;sVG zE~Dza6swE#injwYkA`Ago^qwJNO1;gKLFH3M+a6k$k`*wQ-K%L^Rq@O5|=hucDu*d zLXJKWQ45X*UlK}OZUX#MN@D%sM1sg&8I3hHAj47y_j8hJJWOgsx{cUaOxrxs7oMWz zx~?#Ula|@f!#Maj$iyNlmn1U^cRVfg!ins4HtSLNUENwBURdO=__kxO=MtW!NWkt; zsL#V#QDOykY}Ky!1(HV@zu)g+SS%HXixt>gX_#?`j1&^N;7_VRs3b& zl70v>J3au%`w9{k!F;FSagjf{cFz@jRC&%=XHaR{shE42 z5b4kzWYlrur|#2{U#pS0`8wElYfR0 zcTvicchOhm?C)^bf0kM~N>x^vegQ_@L1a)uK=(ky{g#jY!kdh-bO0-Zrp+E26lw3K zvaw7lej$hy^3U|)v4y~>`)($VKoJ>BW_T%Zt}Plt@rB+M0!6@e zm3{~DE9-C+l7o<4#A0!~o31WK<)243 z_{#%!aB$=bK2)@bw6Jj zPYCbqI!|QK|C{lSi*=CtM|6d+6AqM&)5Dl-Y5Xy1UYY)xEgCsHQWfoyx%sUl_8&K) z8bIt1A)ivv?)=BtB}2afV`9evOTWO8kU#uK#J6c5ne6)qlJ>h)eW{P=XuS)ADR(x# zX+a5IVGWmhDQtK}gJ6d_oEz2gIxnPj-{wAkk{vla*$IveLaq5k^9J|c=)JtyDI~6$ zst|L#Qu0H*XY*R218e3^vSEp)ny9M}bEtolX5I@brvQ%@u9_m=)I#Nzs^6kPH8UNO zeBGn0jL~3kSH;FMw<6~6Sd`8mOdWE2EyF%xVfc+5DmyD3l(7$_5qz+b?cAd>#jLLP z1JbbK!9?GZxXGX{gWz`6A@S!8N-=IlRj-!P!|Uv&GV4|kTI6sqF2M>d9fuAL+i`4hs({`3N16OJvD1`>YWP z(dNam3v{^gAZI9`U8ytW1TWX=3d!d541#;PwdN(38hUv>?o)F-jml}$TjUL;6xN_K zF7ul>d!L-aEmL{ShxJ*sz#N72N+F6uZhA<()d7vl$QQ#?muC(=0OH=`<+|Qoo&C=S zd}>D*E596f)aX7AL3 z49~EpzJZ;#FWF=)s*L(Okc^VNHUhd^GmRSeXP^Q7W1;%CCs zB_FxA#qI)Hp0&O2JjUxbf;eqaU7M%?>jw0b0>5}X2A_6cqZZ2kd?^~>|6taIg>1t6 zydmjV@sceA2daN10GM3rzgB~VJUe(d@ z$u8wU>ePLhcB}e`&gzh`bW9K?RSp_g{7`K1xNiwsE-O6Vj({!Ij$G-WbEzjK~e!}Mru0N@Iw~0tcJu><11e>)TXg^#G;4% zr!2l6C1!c^wD5IRf$M&qmiK^*YlYaOexQe0X$YISPm66;Hh$|Y*Ju4h3t8GpRbz4X zPQ^>=@cB@XR&)Hn=f>-{CbOOK0{Yq?kq@MQ!V64dW$-(xq74cj=knfzCAspA3{3AH zpxRM8dD|vDw8Be$uQ#g$ryt_A2o%5)=6A0u%Q5ALw35W! zEk{yfrVR`4vSA%_X+eh4PR)8_3GN`8q3;+@u5XsNb7(+g|7aPd|4Bc^diUg7Qb^Kc z$kJ<5QbM?biwZ9|RztniTgGB~m0(ufP*=EbScCW}*#8=T@|gWZHVXvQ=&m3mf(bsH zw-;m^;HwdZ=a&NJj2QSYV?fuwpp^30^y2aR);e=^l9AF+BAKD>V=JR~aL zevS=|c@%zawnwaktf5E*=F1nv&M=@$-{eCOlw|EnXwt& zMNeXpo3RalZw;=mf{;7sB`&tZ$DHp$E-En|&c3Ukv;DtiRhT+Gw!zKv5j(BG_u1}1 zh2zOi$lDCPumOW|w%#X;8yf4)E^w39%f&PXEz|n%FX;gLpEv3o zOi@zGf|~+T4bcel>g6agSDiqGNJ&MXn&ZWhgaz&sVIJ=6ZNzHDXTR3;bB zwtR?9fZwvT*gcuYo|8ad=U;7x)5xeHB;f^B-6(fddI=ONt1#6dlyCNv##&Nb%lnsL zLuuS&a9@6bmlKKL5Un*+bq)x3uxT6L__TPEx3BVy4L5BaCaRGF$~TnuP^?$rSf>jB z6bsgTOkdmQ*g(yqh`O&lNB26>qdyIK@6PzeB6jXz!tYo+uq8QF5%Go&0f=f98sYu) zV$wu*FI`ckWadrAC4NpPy6rttLJ78XHo6^a-rZO(LXnL>!k!J`Lby95R-E6UvQ zV(tvfbD9Fzw={#L#o)|SKwbC)bTK>TBBgUP3KFs10NE-^jaNVi@}pt$hq9uMtJ>%q z^Vhq$5rLzNTi)+HYEK1-8c&Ta0DUum=KOAtJS+bPBH}+Ozb`A|fPtT+P4LTo)1!5( z^M8`U|IT^6{%(EiFDL51ONaj_z5egn-InzKb0z~^eV>L3H6XhvS|U^J<{AydPv*8# z$`&S7>yAQ$QxqIPoD&;N0)fUA^$%2;6@eh)SfL;;Zprg$#AbA&@f2Z^`Nc~Zvzq1p7pTP&*b>c}Mq^`vw`KU{azY!|uwkV-$ z&lv!kOSl&|pjNCOtFM+(!X7MI8IR(5_AzS?Qo?K&+=6A%MLwyFGiRPVh?%&*Gn1{G z*rzh_6I9^G(X(z4+MIfUi-YWpj^LwW?(Z@~H2Gy7HrXs( zn&8M_C3H;7((FPtVawt@X^{{Pzc+saflx(FgGG7aD=jaq{KvWQ*$paqh4+`mr z1i2oxh%ywy;hCW*BTLVxGlwr>(ypyv!&bu-`wF-%{WGq?vPGD&xO#4o{Jn%1&iWy+ zHTTEWN=ib>%Wth?VpHC-A%u475LxypHmSVx-=s^cj_>$`sY@>RM6m+*)|T}yiF%yl zH+d$D6V21}m2+9u^rq-dm=H|UbykBgmGyl<*7GfQP6?(L5;}JS;A|`hYEzxBD$rWf z=)uoGKSSO+7FsW^c{6}|qPl`x5j-yUM?ZnZ3nmBenpHgw|9r&4m*7mjGm-Kz--&@; z>2+hUAYADpyd3URNX{I!kHO%I>ssa2#Oq(M%n1sI=Osgm?uL!CzIAvDgE@rYn#y@KYYiCe))JjoE1}bn% znI;cxl6NMy@5M95b^rOd- zMSYYf1NQVoX2{^EHH3EUq^NWuNptK6$_F(AHsef$26HK|6GF3?;UtXZ$GmB_%Zsht z9eQ0BTv1 zBjwcFBN>TRxxb%w3l0X!ve&qELQ{2kreDIz3;xJ^PXLwm`&N}D;lHXZivg)ayq>^r zCR0g}3cXrwlNUzXn~fE-VS?G*3A<>cCCbNFLx|J&+OJ3tTCRBYpkuH)KwrZ6)6~L# zxPJlXUn-MhqdK~_NQn(& zGM+u#b+u!m3n~#e*w~;%tq!hqr@vfUH&AfOU%ZCQ?Lo`bB!dl$&kxrVmM_3*LRwXP8r*~6F3XFFG}RkvN@QjyW%l+QkK2%9Pq{Ti^}x3;naj|nBu*?@72 z07)^O)yEL4o`9u~fWZSW2bg#5F|3^*zt+g4JiSDqWwkzIpY6Q$h>6 zM}fcc*`qx7NA)Lb6OMW)`M9f(&ij^~SJvQ{N8e&qKxLC3Hte)V$$y;640!@NuZC-N zeu8G2hZyt*%A)(1rrmk3wHF ze%)Uc#MT&>9CfvO*31=t>tfN_%Cqg=vEgTv|I9-M8Oz<$lMJs~4Us9G8qJ(nqDyzt z+$ao3xe=F~u1`~v>z9q!LMnFaeZCoyB5MD9UJTUd%FXD-=v3mDdRiXyR^lP8YFoC#>TpIuFfs-9x7o$L_ zNr^d?YjZm#2h~!mFgRb+x-wn2T%Gau8airyu;%#y8+NnN z9;3L2t{WQZ_OdJ7z-~15VRPshT#U}~zD^svq0C*pv8r7zMI!VE#fzMfD5#phV?vr@ z>$d0SmBP;Qu?Q%nD_me-OZ>u;J+)p1NnE;kTH=7$di^jQ@XONBSA>_PKG&<`m+P72 z%bd(qYr>6b2BpiJa>orvvrqDPsDVbuXLAibt_0^{g)p zmtDyRyc(SuzrGo{FuO)x-4ToN=u&rAw0Kg#%M}P5&zozW7KI2bN36y*^#EUPF$AjbSQE^6SiNBOBg$-(5CH%&!j^dLLgbA9(AI2wUbJ}&8N>(Uo&XLM zhZ?He)v94Max7GrW0!TT7*rS+9^+q*fcTH8FJ&bdVQtT!XKXC%7}fx+3SdqiNsKdc zxK_ptVI%<8sCV~WTd!9vdp7UBV&j@|E9@yC*@(T2Gfmq&T61wXnyQ=aE@9f{6EPO^SDI1N@p>pD zF=Q(RpVPyTzJvfn6BnO8$+V18#qgf2b~3Ez0MikM`I#m$8{t0!G&sZswsh(msrXuU z#xU$pDC`+8FAF0;;nyGo%pMHQC3oeiK{W zWKEtc6^AVWo0jh6X8fYZ%|NZ{8fD)H8A*paOkd`ZffWC2h*sv||6<~Q{_r=tgn+Dm zUM^4|ZL0tZs4_sKes?iQZW!-2{G@`P%ttLUd1LW7R{)W)&kqB%IqD{gwGiah$nj6~IjXU0Z>nEg>z9|OIlgwi z6n=eg6m0N%v8n}|-B8(Jj}lP!)ios<-U9%n^uy=yO1Pq6dusK*skvz$^8*B7{>UKc zJXk-3;Ebw^f%s$t?J0wA;JfTVtfr(%L9QQM+)>wh$7Ix{t~#wfrj!$_4mFiJdl)E9 z)nxbHuwZPdW*tlx*-PyXvfOhCsZcD9%MfbU#wZ}OlV0LOuNS{!S=SCcj86s!I&Zez z`e@I5oU0mAQ#&S^zC3#t%~_f>qs*1M5rHliG0n0^1&>Hr$tRW0+*U!nhH&wHAcuUw zi;D;#AA4IQb8YYHyx^Nkh8}PA3(v>$CkLZ|v%P@HF&RXgk0?b5M#DWyfdSdaWd*9D$A>$ExVmiv71NrhyPm~cn%~E^49=xQq6{%?^W&bt;1<$?Zbr4K zu~BSaPlbW!4TU#MgFAV09;BX=cwKFnH_y@e7xbyN(1Hg4l{%~)6py2y$vY&h90z^c z=OsUzr(z~MU??`AA&_{|_v|%N*o~%Itz_s^?Dp6uO{{HRzL|T8w(*;mpL7bLPo>XW zi6vh+A|x6Gd{m2w*ONFNmpwr!q3!oa0h zySrK%e?cr6IQe<`*HmrelY^^-G~SbZ)zV;po%D%>;;uP0u^64>(h21&W)nl5WH)p9 zT7_ZjjEb;*vA`z9NYlqS@ zEmJu^!FzIjy))gurxiHlawpbKQaHXZRQjUCti?4-D~UzTE7W0{*rCqqq*Z;^7D#ON zGt!N3*gRK^x@;^78G?+us6UjTKoiVk>M(%=)`t^t17-d`X09iNSVg1L)C&-PcO>2^ zBnt1Oz3RtSJ)B|c76%PDoxxM14rFLg1tWdF>1q58&HQ%l@Kb-zw|)06S)gxMyWC+E z9K&s_g7lf79!wOi4!?mj=Cm#-1Zs~Bg2_VhY+5!KcAVQOqi~PLaD5X*kt8Tm`fE9l zK`bzce_AO)#hJOpHr_zQ!_8`m2F0Kh9U7wM_0LAhHIu!T8f=r}l36j+5ewi*S{<*W zeaFizV_nSJ`Qw<-&z`I6BH*RHxNI;~Au$(CAXO@lzB`{DPpb5%UL_40bwy1Xl`$m8 zjdEJI&uh3>fObfyS~DxPZ6{1>iX&)u26*8~b)koJB-@=^Lhy^R+XkhR%d_-&*TIk=ei#O;rx| z6&V^z$iT_Ypoirzz=0v`mf%NtBRdu)XUM=)tWlR1)7un%f^4BQ9F%IdeoBIVe6=$^ zzj4aKJ{S;>xf?}ri2=xUy)tAItCi^hu>6@ zIiNQ*R;zD-f_2Nl^NNX(;Byl>3+ z^flS$#hVojZo!R87VqV8;_s1Yl__b31DQ_nmewQm$d;X}^O3&_@Pm7y zPnGWhV8VYz|9(?j)k}`nS=t$H&YTW21f7)2Hf%+SeG+vfo+a=II2WhTY8d2cn2#l-*tBlRv z(}sZ_)#cW0?B86UBb{5VK_7g!Jnf8-Yzyp-*JpM(gfPOnB(NT^C%5Lnq)%OS-gcw6 zge9fMl(o zLM__{^-kU(*^5ycsfwYK6}Obt3bsqLph(S#;_@lMN!jHbL^l%YWiNMQn=hlT8Q zvd4oun)PzrC$ec%iyq59L9|sGxZGYINkj^(0#1DDTr%5EPfnvgT#Mjy}y7iGRx>{b~(H-sotgFNGIn^tx%aVx$V%Y%LDL~W}ESe zNUhO*iiQD3Rf&bez$-s+w0?Eac>03{f^t?T*ebSasCb}M<8)TcLSaH0w&oY?N;i8^ zE_@VlglKqFdz;yWymNYl0iVfTlgmo?cFm9yOr71AMYT7Dw{B+{0Nk5<*r%Hs8^TzKm*h_40m>oJ;T~hqwVonRx-8UdjlkcJQnKH+*~W)SJ@wLcKXZ7TKJegH^B z=V@m)fn+??6GoHH1EA)5Cr^Kqokydsf7NS0J&29yhUyC)cm}nwd(GnlQ={l@2@ae) zSZ*{e;ecLEs~;I<DaGU`T#4j7LfhKGzvG~m_zUr zYr`--LYNS|7m$sH$=A}1UQLN|4}-eABqOIVY>SX}1b5WaX9iYhazd-Q4#aIY=46;! zAD^JrS>w*;!~Ne%8djWIvBvfq$%gK4Q;X}`TbyQbe>$Q)8*9J3_Je5!MJT=wC5o#F znanY+FRxPms1ap5-$XKaDwK0y*vK)yi59CnLR-sMAn^1SGXfs+YBlMT%HaO?S_2R$ zHQX4^{4{Qi%+qq_Ic6OyC+1+wj+uIjX=~dfFtvX}S*UjczPMn)z6H^hSPr`TV>6aL zqza=e>{A$SkxYHKQjZpoSFBqz31Nq1;ykadT6czUMlMoQAu4S7@;-*^HSDT*goa|B zu{AwHS+Wf@zT_ju=q=vqqvKE48z@GD_?z;Q25CGmWfYoO13AMZ3H+X_U1j-mcaGy> zg1A$?*r3-+C_mi++d7DNNh#btQjPF<`+^6(QcpYF99HW_!-lr(Q2D*J%##m%X`9 z`l)+LEjM>gy=!6A_cQ!_8^uk+GO!>d!_<4C3G5VRiw;*TDWle;)+<0BRpyQ`ldx_(>iN8P4{`hD?xl|%i zqZCMCR;$ad{1UU0&U;xJcq#yz%%Wb|qc-4pBiR9fmH@{i2edz~&DJ`Ro$AIe%O;ab zv5EqTZI&Nhh+&!}sV~p~IGGNTYp=s7&Ac)aKRs8V5GW10kQt>GKnU8e&2QLnmn)>a z#VqoQ%?c{ExJ@gMzn2)GUA9nVAM=U($zTVvABk!#jX?A>u3VV09!A5bRusn)B=4)c zUj=RqaAd3Lu>h{iLOYWeR zNdry$*+p@+tlZGQsMIVjz8vDyrB!QI|4Pjf(}qb&jN7gaEcMr(MEZn%lN|o*+6W*b z+6>F%+}1uo1u0Mv;%y1J$aVq2kWeldSQyOc14q!(oK7OM)~t_nXtPH8%p@kIX%NAU zFv}gZuhQbG)y}^MaYK)DXQE=BS@!xp43oUt8FiUl$kk4y$kvIrDGeK>n}_6YJQ@T^ ztn+49twE1_Sq8}^l8Wm0wnYg?oxU7S$YSV0JwRx{v!0ng1CbQi<&wrIdE&q_W1b5Fl_pYJl0KDi4}4juP(gMZ&jD!@2oWdqgZMP6-^6_aSzoy z>q-y?W^Noe^1Dgk)p`~LS459bga>t$C5(%`wN+?TtS$jt(+fvY$P}kC;k}`1XvTox z8y(bM7A^Kg0p2R;#PoV~WL;Yk^A67b^N&}%gh?BB2e^Z9A<&>+ck=KU>HzEAhYS=Y zSAGPO+I~~@m@`2odq|!V-YX+{k0#2SMaj9QK5@USeITS(VZzlmGhR=;`t$+p+^v9E z&6=In4T!kA(cd-ooe=IJ8=uG~(or>z}G0tfIVP+g{a0 z;jKnu2T2=KZYKh#o7C0bc25AW4!}FIbzlS)E2ZeS-XW|`v1G2+036%yEQh+d(WjN zJ9{AR@2h&+-NJKzGqrF~Xu*?D-E0fI9>C^+q)$iL_$|5?ZU5}!su%QUmNnZK6!{JH z-MFhN_0ph3^#aHiQW3*~PXRu!p$q7P;+8o9k(f@)+6*1=&8Cy)^?||k9|t}W-Z&ZQ z;^U3%tEICUVaoU5kFflAEy-t9{tzXeBk+$~(&RP@@K)X9tV_=OnEA5OP`_stESq{{ zx`hI`th;Tb{wF>FM}Y4e1JN3?coSBdOSg_)gYMhxMeA zH>t|6G3>KRcrUM@KT$=8`8XO#KcCO}C5?wQS#h9~I{MHnw#iEgpu_Nu^l%!gt5k#T zXX!|E`>g!Xe=Xd%^OWx9HeLJqaFyRMku#$k-@dB-qbB0pHOz0x=GP{MA-QldBw{+7 ztDDFrm!0Ze}vFXC8$D*TD)O6CI9y4TJJF!@91(Jsp$SKP}A^#V9Zvxe1nyrmiwcUkPDp;k0 z%8+t|QU(#3A*d9hqJSeaC}B|M5at9@6s3R&5kZ-W79tJ|0s=B6B9Jgg#xMs6Btl3+ z5=aOkUzfF95|VuRz9jE{pZz?~-rKwYrue*s$W4q1H4T40 zw^PKvGc`IZc;&pL7?}+_*yJ5G`+Y6V%wd2W9xU=RqWP@di+vizJ3W8E`=t-V!Ga`* zi6nQNN0C0bUT5z#Ax}0hS3~pxMUqM%5E$l`2NbUyW_0dw94kr}~!W)4@y^+$Aqb?1% ztZ=Ek+%D&GdHPs+iqOy%@8EEs`DVauX^uFdq9Ov+oFBp z9w*2%?zLO@ZbXOUvPWUd&Oudoy>&o7((<=NbEOx3KoS8EMtvZ96Cg}8wnVscPg=#- zp!~#QJjPa4KJT^o#L`cIy=~s>^AXUWX^z$x|4F@q@C2UQ7QDRK5vxR<=sPRI++AOz zdaA)Y66yzGS1vr>VV=9i>vQ^($czkF6ilzjwU4>0t-DXijW;jNQfvQWYLh}@`i&<> zjHN(=OrXIPcVEZ#b8S`84d8`O=m?%Zi)hQV}>ffqD`!MoxOt1o|lafz1fS9!@o}6#B$x;)r z*7;y(*g9JSF5d>prE+qLlpj$%R+9kd%DBDeOK5#@J7GBAI-`AXFp+6;gaKOQ?!HEP z_xBm$|BcACy6)R@c z?lw>53WJZo#5QaCIRj*XQEw8?_7vWg$_%aJS?bY7yM@-!y09~^H#H{D{5&1~Q^+D< z%>qxIgt@ApRoblgHON2@%Kdd~g3ZaJqGxC*4GoHqrIIWMt`+n2dqYrb$rk16`bM)XN8=sP zN$ye?By5sPe~R**6{_2R0sy>j!CnQu;$cGkD`AM!W%!hjV2GBmv{B;IurN*s1aFm z^v`<%BXeBtpv+&baJjHj+|;q~@4vqSXrz5ju0m8A5Y)IQ7f$T<*Vo5lcnZ`FZWwSngyG?muP=e<@^0Bt5rP@FPeteO-7w*AQ zmbV>#j~#fcw6lN;RF#>VP+~Hl$EL%){36j41NNPS>HMK+nW4HuCd3Yk(n$4JRK3G( zirEmHc-FY`Met_dANG9yp>g43=azK^X)NH@jjc&{yO_sPD_aOxB8;9-?H*-R_|nQX z>#DETxdB30+LS*;98I4|6{qAj&(S2K2RYa0G z&Ga@*&^WaV7B2HDZrfMB2~op0Kk6UDB75S-W!44PSCz?9dlAap(f8w4ooi6_{q^?Rv=HVxW%vbntF3k7RgOKyQ=w( zeQUfnI2PdIJU&Bn*HX>JodA9B?TWwF)ff{c^F*GyUEXtD7F9-at)ef1B<-% z6Spr4qN0tJI?tabj$bKPHu;4;wH3B)(54ur%96_Afv?zV@5{tx*ukwgnZ1m6ap%}zdJWeF1DP;|Uc`s+0wABB#`5IWOe@0&ObRVprr;gQZHY3ra1uq%KT1RiiWM)|C#N{JmHy_F6;Qn&o&12Z5ysjnJkw z*ZZRsRo$2rhKShAv2l57M-n}HPK51D$Ys@Ms zbo}d?>SjHxF_*jh{?jQ$VOq&c?}Yt2wR=bS%dTRh(Zvmp=C%HtZQPSTe$FlBvmDRJ zA{7Vj5241x+=N~o?tO}RshyrC$da(;zUskoWNfnqq49mGEkKe@t_Mnp8*DjjM?!F} z=@p>a=NMTB)$O2TD`ss;{o;ElmTero_sM#4mxx^_m9{4&ngR?OAAQ+Z;cC;#6u2`k zWPAHq3&S{6yGvYOf*naWBv+`A`Pp-zl<`T3{6d@Ffs@U zuSdq3FgfIC8(Hrp%>aeRUi6ag#K!qnDiG8{_v1TT1fx`BRA#4`%&q8Uaz!@1M>$c) zu2tRL^u89cX`yEs2-FzQY|ysZxd=znO_2f$WUU9*;D} zdCu9Z*hKQ#_U~51Ra_h*a8!m>2NN5sRl>yYYSY!JeIao3Aytu@`Of2j>`L<>{ld+8 zU0R1S2I`!#^!T=!jMcwsM}EI;CZY*eXQYS~zm3*1QUh#w(ekq`40y+wqdug~T&QOv zfUCG<`Q&k2DY(Fz`C5k`^-WfgR)fN733MnCcEI+_&lmoiP!a=8;m z@Fa0eOMB@asl+*njTJr1F2JN2kR-iFOCd#mbe>IAQ*5)oAJFo{)q-(Kx0U%zMXM`L zh2F8>l$TxhU}fh4(hX-cPb`lq9`cQ z3rA%d!m)U5&3G@%N2W42$Mzm?aV{bpv(n7;QSjuUOBj#ag25z;m$u_=D;L&Q%)17P znJ~No5x? z*yrZ?F^}I;QrR{c(V_a7=Qn&GM$_|tUBiLb?JzNiYM2CiYv#fjZ*av2Zojvkcbj^{ zReD7Kc_RmP{Af#yR`S-7Z3jX%@aLdG=6J-!yb+|4R_ZU}jjVM_ii?N^x@Ds2?xkgY zg1OHKV73!)sSbE=@J#Cm@ncaAJOQfOx`+lSE1*NiH(u_~=AQ=XZP0%BN15lY^}XE- zq@nvB8yROs5Q)UoTelRMsed}xx@lXTvWXp`0wjB(k9yhRR%_&^+2GD*Z670^lISHHhOf=JCyPZAbQ<>vz{4ln13p+&goWNMD7JA zS2~o!24(^$)VkBhu;g}x6%L~iSi*RDW@@Tc4;q!Z6rCr!#%^sB+6NgpV;ZAyX(wbs z_O;GZ*%Vz_PdWiHmkvw?;0?aHA+_BE327w0zGO6{gsZueves>5*X13unK7AZ>k~vh zhVMKZmG$jCK!hh8j><}&Nz!R|^fI?w<+gY|Myd?lD4I40R#<%$eaCHOp(Z8H)+g>{EZ5mWI43T!}3nnZ|atfTxM%zfCLVQT<6QeLxmU4_J4 z=cH=QW;}zhQE z$UQP)>ilTGV){CG27v^)h5d^gDB_ywOTs{~v4K#naU!)1L;pLRt zxPYXXX>U6F6$}wL^7TiQT_i4%Le|NcG$wl)Nb=je9Wsa*;qZ=17{4 zdQc?dm)Tg2k(AN_0X-a|uWVTo}7Z4KeJ^nbc?cJWy2u|)oaECUGQ#jd3dKrGrXx4s`&Jl@hacTKA#H|IW? z-L`OK;MIB%IjgE84YH+hiP9Y->v={!@#c)?oa?#_2XMnWN4{UyaC{H2{rHgTeUzN) zty%b_m{Wr3k+??g=T}{)+Kg`*@lNK0Kff+E??rO^^~C^BkC@0bgUhgQ``fm;t`IsY z=gfUe|A-Gol{(P5Y8R z9vIf41FcH3r%jT)W}M0v)6jRhR?g^Z>LhM0uqtdmO|nWc75Y1e?@PtoTxmv1c4NXz zXiJ#YA;}6{1)EW5Xu)zxFpm=232he(o-VenW?1L0Mq#eq`0LoVYc+u@Mb=OQx%Mq& z{MH$yOq9W(*<08B-Z1%RR)y zbW={jkO;%FsV|VsRRH)rc>yR*X`WppUV;j1=k}HNC1q7s&*-MYd5`d14UNJlACqtWd19b>N=ot)+ zD$XlWBIvqN*JyVJL(Ju-jFM|Ik4|ah0}bTKX(lo=-rE*yQ>PruN=G`g_kiLT4on{FUnkzj^g$ z*kg@7J4%hytZX_YIrm!~um0aU{{;1&G||{xh=Po#H_KZq0e<0mr^Y?9Lcy~B83YPU zqmMEPcT;otuF%7~TfWu~qQbJXgQO=S#0RR>JtGl@4m%(O&Bx@YA&JIiUu7dNHxCDG zrowK>9C6K_hw46Rc14oC2l|9Hk-Yp=Mui&79WfoKV?OS%dK$D={r-z{Kc2d(ry^p# zkJP9|2WfkD;gs&Z{-OBGIhG{v2p+5Ig4yNtzwiK3cv*48J-@E6Zm$dLc0BhDk^SWn zxf9YnD>=anXIN>Vk~*DlBp37@Kmf*3#j_0b!Xx|@c&ES9e34RUWjV|Zft=Y}cZ8^S z_bbeXpZK`!Ywv<_aLi;!>-CtDt&0Uvk#6hq z7u@f34yU#=gHePY1b=L zT0&3Fw@RFO;B=NZ#Qkm4KUZFN&8e&jvl^F8y9-amrrUzBvi3c`b6FAmt4{%bo*b}3 zP^|-lw0z**=yE{JZ2%6EYV;6TfoJ=MmiecjZ*?CX)JQZ3_U2CdaPsqw1fr8DASpR~RAf z5_Jzmpmgxq>>QLaZX!tE#mVlz_{Q8Zs7b{j)v?s2IC6jw3!em`K$F+xnoR-T z$-BfJd#lLU=f2Nf%P!)sQL+~ z9nfKpA6014fYt(%`GAvxtZ4k)boAxUu$GzdC+0LuBFDPWy)1huFgLVT?{N6t+(+JX zpS?NPiW`q|%PIS0`YOl&i4tZ&p0L-~hJzySBz1ni(>qiykD+x0+f z$VxrS| zi%z~AjZuhYZ!#X3-&nR_MSu3>*j`jpNu13^W&G2bQ(-KehuUa`PE%*wX2TLmHYopD z`_9#}nlaeu2~kzEsXVW==nP!ZIqkDo(64SN#pE2wqc8y8VM8^pb@^*E9^}!;`>f8Z z(yI0_*ClnKFCnz68pXEl*`1dH zgItvBEI{+{pyy$oz)+>(xMrl3N5oXsL;|FeI2JZOvjr^nqR#y2F8!@nG@vGbsZhCC z7j^`x`q+Q5`|)}f0!fdmuYws3{-9)lU3x7KtT62fz`D{d1%UsBF@5=CoH_5w@3$~q zc1nq_U015}e=PQz>=Z7)zodmNxg>y%%y;6iDnuSY-#E^1_8#Hv?oIG-CXYAw=~lHrsV~VQ~=qVaiZQaB_iBJ{A%HtQNZsy^;UPmM{$5H zaS|OI&%&g+QmpaEu_5ys0xEJm0$_#>L7hy3%Lqa z`RpYz>#tYuH$d*6thl_AV4d0Km-Podd2{64W`h6|B^diuHoA)s*OY6eAKoF zJP{_PE-Ym*_4l&;9{L_>+~Guke=?bNE_Fe3*kbvN&Mm(gO|E4nC`qtuB4PwC&a z;Wh7`2gw0&(|)$$nJL|xMR5k_Rw}G#B> z@TkaUSKwm-?8RA7=1B##19(dOhVk|@ZCUfMqS>4b!w(M{#|K~7v=UDy23SQMoO+`P zgK$U|=>_l*=W{W@ZL6pN zII7S&35#UC=t!Pnx56f^@b`EDnTnn43clY3?#WH8Rt%`7BDh-NS~hfbtNkDa8j(-L zGJPsN97gU7L{uNv>?=#FTmOg#N=d+JgJ0LDRY*ldy6%dw3$Xj!jq>#WJsSKuT=3`3 zc-yFjrQf)$T~VQkcp$aF3)eore*Zvx!wZ^y!(R-9JI`5Q!EJq|Rla=Pu7LrOsUO#p z11LUmT?!iQPdhDKn6f@|JD`r|tWv@xR#unlFCJO+*yB*s+uo5T zN(fP7<}2f^`B{MHMzzj_b$WVWWoG2*uJtvqL(5q{#0YlIQR0V+=T<8>3c_v`(fKA{ z{)gGl;wkF34)RoYC=BVpZSu-R)#l1NIOs~XMI(Q-sB>BW@LlVYI>>!9NP4!0(#kAK z2eYOMtg64Nl~=>G_|d?#T9;gNOX8|-Rf_V~apuJ{xlp}&?kN>K+!~?b6i>Ic?U;LW zrLw;wpPoScd8Aa@=5nE_W^V4`6nHi;;V$Rp;F+TXkN$4D+v<0mF9E)uU%0?@$3ZX& zaCAuEZnECEq@>Udwh+jMy;0<3f-*>riQ$O(9l9=R^pADMn9wQ3C~s)-MgRT^w2lYF z4wqYWNM>qPi|18HFG$E?I1Nd8z|fSIIVTetI;bRbtlrz6W^bF4_uID^iy!1LMY%89jdUo^&}Ei)vs~j`~P2rg!!0Iaiixn=yAA?K3l~|E?Wy>BHQR z`xM^p6T!P;Lvq_~s;E4za!^1-P4Qv145-i4pWrhA3(csgyWABY%y_x~dEH)OiA8GG_KKk+%yAAB2l-)*O4n_wfnv zV!gUSVtjc8bI(l7*WaJm{GNGCS8P3s6N=t3C1g zaIa`d1aP7{(tFQrJrSV9`sKv$IP@}*z9=i){sNN#)$72MyQ})ibMTx5^OmiqYF?AzG#w~LPv zt!JBnPY6$5%thfK*t-?VCT~vR)9eU4kVlPK+uY#+dxu0f)~gdfzd(~K+ImJXB0rvD z0?6Mv<=D|Q8acXJSzDGja-Rk&imHIEH*^Jn2#%#AaU*8f55c|!nn$}<@o(Dk{5fGT zlt20s5=(ax((y7gcu^tki!11BMvEy|Nd0xQ4C@tcIr^I!q*MQD?9;_OGU=BLq9q+AJDC&!rG65NFiKY*FWY8 zI{ycadHI=@FN!{(I4uM}A4z$N6Z&WV1wu61SClZ-2P6)0rPq$Y9QDe`^IZc zUZ8ml{>FP?$pdAH{iBlJu+O35u&lSM;zJ5uhe5k{3Q!bBXmy&)(2uZAa5snql}PT4 z8GFg_l$9?i#>6XQtK8RXso|1vpEv9~yLbV*kxz;>u*F#<0uMU)duBb}PLPDy2*e(M zQUT}hWrZtqr3^eJI!?gC>ye#*^WX(W{0!6lJ2CMX`1fAtP&}F{hhOP?noxQn6oo@y zeDRjLhq>P9>tBBUgwf@9h1LILB>PwZN~e_!=G++Qlc+6&iJm~NZ(1`>$q zrV2KvZ|>v{C0XLT@W~2mXw7zdfkpXVrCZ}b@t90Um;;t_VQNp2^j7o7TOLaNWq7@I zwe@dbCdOBPAO8Ks!M>U3hmPBisd7)gkN*TDDBO;}zHQ1i3fRA@1FFF%ZZEBAsT=>x z#eo}tB4YmUX+{52CNoi*Ko@|NUA|T8yL5Sb+E9Uw{5M*ZsR9*#Fdp{Xh2h zOH2#}JM3*j)Z?ODV8ES#PZEvU#=rQbuj1OzM(`~MoW4`}_S=1i@Qd1S&V2ZC%gtlj zoYjykw(~Z;$-2#dv4m0}Is)KW}a+yV9vfP0D8RnJkBcDG`I! zKai^iI74)Wa}MSMY+X?jA6r3orVM+R)c^o;&v{OWm~cRl`9-C??gH z@p^PWcN1SngUN%Z6Q;kPFRJj?M4#~+(CC`z%bBkln#}9k|Msl(>HbQA>i$USOJTBK zUL1~5s1sefh{NxX;hKG;1Z2-?~ttbQB`2V@DS7_DYAR6 zBcRff2rcpaKDiEa`R#(`c?-csR`XBB;Tm;o&;;SKz*AkIe+4X_`TM4G|2E(3i!c7f zsGrzt;pMq^XCP54U}T~H4R3$R4V5NhQlHD(Y-9d*NksXhK(yA6?5)|G;dDl)KSu+@ zzOyV5jbZ0X7MNh}ACXiNOKj@)q z1r1l3=PL0*TXilyRswT?0$>zJbR~uD@zq1o;NpD*{!(;q&%%9}m)jqcutptG)e=2Iec*O* z*XjO{WxF4_>mTD^&bOR$m46qx<`bt|!1^T&rgwV>My`CX0tEDJd+k5Ag)@T-d9gVC z&g5N+8mBkkmNgW#HB^wdJp_Y;Ocm!d_Cb4Fb_YzH-)!S~*ED;^>iXRsv)`F%Qj(S+ zj}kXlGhss1K3tJv7p`36e%xo|lf!H}7(;I*UJe{R*#QkOK~wqO*dEd2 zp{2<*_2Cy4-kjC@JK>hqz9kachjYdG;uPZPx;IKC^oqb^-V!>@@JM}bRpPQ`Q_zs@ z;XP7GGR^P~W@w4r%OH7&1o-NS%LgMR5s9Upg<@+e&{!fy+r+k2CKqBCT}VNPX3{TKB`-yD zP@{e`QE$E*-{P6YJ84$L$3p;dud=6oXJTJ7*+-2=eK>-FxuBjSYM0O@XPuZs1xvu5 zkDPvR?>Bv#|M+;>-)&cHSlGruu6zwd`NEWaxh=12Sx|4L zE`?sd-H9nY(NvI@6uV5Y#$je22BxO%gA4NJ3s~I_?%sdPr`P$;n@K;X*F94szZty} z0-b_i&}crMGkZa{B)H4db;Ln@Y%OyC?F2hRBf0i>@Yx@0e%uzgkg*;$DP9#75d<0) z?!@x;TKc9r1is>E)RjD~_f@S2mEupRbT;y5yZc_0#*G3L@8}HX?p{o)NB-c^&&uGWba00wI#>?pu9#Ew@f1$#ukOeM1{}n+-Br?MN&hOnRR1j#Q@8Z7=^I zrukHR1J0HLJKCy`mq!$O9~L5uO09-U+Zxg=cuzr(xFBreysj^MM=RWU@IH0&3~OUh z7i{6zWO!K0`o*4Fzt}o-JIP$&)_NqL`ksrxg+nXzdM(@$<`i2E71Q&?Y1`doJzr(A|1rC3VtjaLmbEwMKv!c3kw?m-b0-LkHh}8`8~pv=@qMFGbts{YAuz$4ap(vv+gVk*syEP_@oP2QqWh%F_@o;>rP7nlHGey)yL{GJcDz5VDmn zW@RkK`jXL6^(59Ei#f;_Ur5)OO4a|y7W32GAMQjBkY7RW-DSLglva~}9o(b|ze<V)ewiH~YJ+v3xhWmT=G7oG2o48B`D*aW~_$H0&ggj_vJp0<<^JgR!4hj*;0 z*Wz5YAq-WaJkUQnHtADvyShpit%P1aHfCOPhg*|rtFW0fztHWIp`y=v%0)mOPK3@2 zh35w#k?HCW`UM$<>dxExrzhgKJ6Tr3g&fy7Vyu#z!@D<8rLB>bH)hV;7T}+$b$QIJ zx909<*zM^F3A%we_Odp<6*dHw9e|0MZTkM3>hns+wjExgm~5BeYH|fkVcgL}Qj)`+ z4He$lyURiLxK;rh+?JND0Y(gfDP&s3 zT3LPvjImn8@{5ICO~GwETzGp5C-d@vY?Ukp(@ts%(bl=*Y!kRpB7I$&;N3HLRiSDT zLkIzLu#}tR^QoD8rzdO-dKByp9?er-D=i;Xh%semmb&^LXEC*BNy3Pzt}J8zBFa~d zfQ$T9bUk@ET|ZgO_j&=9GQ0~L89SRv8?LZ@F7E`#nwbhtjOgm_Z7;R!k?jq{bSNV> zr+HQE)3;SvRJc%lPOhuDX7?WZuQ|3o#X9!s7%;ViEUmwr#A&i#^@d91>7YL+;*_o| zT6U_8R}rF?gzl|Tw^u|krH~I|I-v!{Qs8k;Q(JS_H;OrI}1*%AAeY0}#*C!+O( zu|52>#Tm*)dda;y=5@~K4GkYPf+q{nx^w^?oA1PI;Jr|M&>8OAhraGK&hi>XrzSNr zD7xAb%gfiGGNK{J_?gw&SofJixFmV8w!M{7t8~a@@et`C9fln=&J-N7b6Hd2TOH8t z~NO ze~)1iLUIX&T%T{Mx7|d_;}h#`eQE`|+(U$}G-KX*(U=?SfL+8wIjXDdQ^HcH$6;E# z$8lVzh&veTtk_usnbnI79e;`uEl+#&q-kh}cg}WE#J6+`a3j0g-_!}i%YH>4D&cA02Asz6q|N`}pY4U5&zcH{;kQU6_|uwp%&NA7i$= z*y7Vw@h0myYR0HHLss--oFz5^UC$XxS=9sM_};+u20Al(GUFLCINb+onx(?1bZWS>VXWO5J;G(nU9`x+`cmI*pi~ zXlE{$$Jq;R=9D@)DRs%cESO)p@-|@G!gQy~Q0prUIp(!- zs}|v)Vo*Su`88_stJao1?%pKvm`ao&K(+_3x1qUKai){*AYf;b9&^@01O}Kq( zrry-auz($=9KFNm2mD@cZ7uaLBx)}8=i1(7xh*wJ+pnVJMU&1&(|c{!8J2Q(-p*}{ zyW9n?hEb5~Z}~=Z*Xrfk2`#!*N-rP3;_PECwli_;`;?GE-)8}rr<$6`aG3kMzV7IM z7dk#ji~KlxOSRW=6XRJhyn0#zRIX^V^vx{@SI#L}T{tWkhoCNPDfQ$xASbc?=?;4@ zj*nzf?s%$>)X90z*^=Xz=P61P~>|p1xu8@zp5)NY(WX9c%>5)iY0*;HD5-E&IEu+o9xRHlPn)V&gV zIxJkT@^$Yyw00o#>h(AM#j%`N*1HR}17;o?feS42ee+87OFd@t+Ikhti}O(Z<)0N+ z+a{2k_Nl9d4kryb48BxAvHH6j26ah?U~{widUv6{8Pm2_3J4d)d-|da9=WtI=F$eY9n4x>P15hlae3B0T>~Yz-@v}5J zGK_K=;ddm1^7iVdH~DtU=<08z zLhPp9sPN;Fhapw^V%AzZWq4K9nUa9hQ5BqrRx%;yN6cCW5Bu7f%^O-)ePr{U?~$Js zyD0@}MMe!?rsOV$gM`!1ZO1I)?bAV*T^8_M=7lXY9fYl|TB81t`eJu}gJal3nF_*0 z%$1AKqr+R|Ihk*-P4gm{msqw9J6Z=#>Z^*4@#&-HhuTk!d}VN#2i44xOaEj^U>XLJ zu#WWeq9j{g8|0L}61I(ZAS;hFzUeG6?3_6Cxu_6c!iS4YAR0(W{;kQJ)SPfgel@Z* zq@FZZB5*~t)&eL2gVjg5l!d4%32xYks~a;PhHiOY@KFD!Ry~}(tv@&8;-y@e*| z{(3vKALwdlBqd6rU)nMIm)2UnEmvmCpRoImEa#5MuPxx#rtHeb?=t39E%_MsE(sK#}!K-TEg~?5f-{@97gO>CZZxV zLX=&#fyMd@qOENy+;E0pGWaw535#GzJp#8m?5?*5GQ zMkHAp`^%@bGppWYYcXOJ`9o#=EKj-IeZ`*;=Cc-2xmCjAxW0(zbUU0IYgVWqwZTvI zge-R?ifze(3;EL%(kU?&^}{M67rf1k zH}{lMTRNYy&a-bmEcGGHAHC#VpT=^>`#PRSpTiheHgonnYj{`?IFFKJe9fc>_~+>p zdFe6jn~0`HIqKLBtIjUsQf+LPY({i?!D~Bbo-Tkku2I<;t%!vSE2aiXkbC5W*B6u4 z$4id14Oa|?TJ1bHR+Ki{=*C<)Rnr882mE89enZ-yxnD}+G)zu2+M;SCv)a}LX1T2y z?3%KQ;CeH|Yz&i@q)zuO(Q`y>I(-$*Ht8a%Cyz`yhr+6Pm=qVxE5I`24NXjY3J;IC}-4iNkjtVIp zWI6sArGQ9*cRYa7M|ENI;$w2Td>05U;lkE_f21!QPgX>{i5zYTJ>B;x$Rvi{jKi1K ztQ!58b+lFQ4MD$9xn2WFlVdlpd9F|gy9jauS0e=;%;$(wsDws0%NWt(yzB91XOv|- zmT2DS!8o(cE@fa(qg*||$(>)0+KjFjc5cUOE!dCsyNJ*Rr&o(8;(ZP@PFCr3PKolCRpF)0 zk_V}iBZu6dh$E}KzfXmSbLsn><#B)@oQ{i#?V=IGcmp~Z(XF^~R##fOZH?Sidt~jy zJIG>2QQlI*LYU?+J5r7ckJAY*PxppbgRfqNclVrEyTZJY(ud-y^OY^ip(%k&zW!;< z^U^x%zU|FtY9GH{)An#ZoZDNPF}XeTAjlQc6a-pFwTDk>Ne4+2R^}th-8ewp37Gc4 zwM_I`roI-pHk1tcN#ph)0s>|%D_gi!+hVPpkr8*%gP5XWU47fY#Ol)JazNrL!=849 zWt$Ww|J*)upfmfWzn+7(o* z%`fJf?krg-kNedy7hC5azA@#6SLHa(>yry94Dj{9(k7Bj5(fF@?@vodk#P> zkyetn^VcYs%NGEOua7J(an_S-zvj%k<;@Y#SFN?~w$f;(-iocpza2fG>phBAt(dI0 zPXWa29r$txJH~rZ=Z z`=pB&h-1jg9E!PGA#trhFlO83vQ^uK#Y~{SClG$J@>=D8;L_-=8i&}#G4Tn}4>_0| zb!63(?>g&&sKK>t3!#|5e7RO{I}~X<={%qBg>x|6i>@`e8t8)59miMce05*+&R{R` z3XI2L*GHa$B`SfTm?o)>_Y<@>4zcIe3c{M6P zIF^28L@}j58-IRfsy}1wQz$5~>4&#e|E62Ue}fca7&vb}$!4$eZT79r6daQOv{Eo% zfK@QOT-MXO-FS6TcOQ;o-HMm{6_RW4?Nr%!JJ+H54wL07pJbO})jP{oL*G%hb{lRg z-I`O9w(I8*vL?znHQ=UJE;TvV;gETNj>!EcbWP`Y#PKF-^SV9)DXNVfw+P=uh?s)b z_z!5zOk72X3M~uSr7xqm3oryc$$jSD(y^RENe9;>YkgL$$v5bEB{lERiY6G=`JQiW zs9XYGk(m)wx;2f?iwsJu>|CK!FL+jdPy(WW4^Y;p)>HN)q9#96+{F`|4y)D}`|xF3L)W0CdUnE+{_&j{#C|7}my%h8 zP(7-&bN}^I(zuVZU>08cteb+c&e7dh%Mc=GI;uncPJel{0Sr;yTfUPtxoq9hz-nD_ zkk4)-zUn>abbql4pGIp0M^2jLY{y(A1g0%TgTY{In3=N;bM~A{Kl2$Id+X5ONX?b+ zx^)DrFZm?!&}aUVWw+!b^-wVByeB?Qy(VpX!bR}~;2t&0LE_^Wh253dNlq_UxH#Os zfn-)-U{dRc*I6-~sA;d`U{Wi~tCfZ;55KEZDie4tQZ^YHtHNI@k9!e%g7$I38bNX- zJXBC{3}5JRA8BvsY{-e)cu2@(_!9+Gb!1jdu2ht}Rp3I=;cpzL$*f@v|$m4lDGO=i5OO<=(&HiP?XOo$siRf!rXKcnx zID2%uy!tx9L5N6S7R=^9#MQAq;lgMX?pcshkTPN4Y_Q++R{b=f_GiE7R!-_9R*vAv z6~~#na%*GPrSmlWV8KUjx3_9D@Me_V5Ga;5up)ck@tthVcKtXL2rqN|_K=+Rz|=!dv> z!YIA-qC1`* zj+fG4IAA$gjXyahkH+p|HG|WTz9%E2-~aDtcd{S#+hHXCA08?zs@1@+a)+S!t4qJR zR5Pg2v**95hjMW){!H2UBF_5u1v%6`d2LYBMPDOtsi>unDXx5m`U`cB-58J3m~ zgx->%^JP${N|0ysQ_> z-GCtLcDF&HL5G^!hmv!)b$?iC-Y)Rk@=-y5GtvvdvNs~Iovk#3(VD-=r&;PnzuC5K zZW*pfH$9-skn;?fvyAhM#Tdk_|NZZu!VOP_%b5R-PXu@*vX)M$N)~$8hqP~UK#HVH z_d!FRt#Pd&>UWmOSw*R$tbGxl6FYTMd|J=d#vM2ZImrHTru z2&nWL1$)B^NL5gfE+7O5N%YV~x`5P(h^RCHDFKp*lz>1YAcUGo5{Q%#LVy4v$-nWO zbMF;>$I$P*-}t`&|6hiK5#x64wbz>EnR7mSF1IiAQ`1t(D((u~s+}arbhERD(JeE? zssKn`wLIN1>I&2vHvqN9kcBUg2-G)jivf>vrLzZ-`WVQWht5r$g2d_ulsjoPRGy&B zIO$pGy#14%6|usU8SHqc`b4GqNUzl?E4bs$T`|YZ35oMr(PD5}a``YlR;-NaPRJCk z)If*&?H2e;`TW}DuLAAHzW(`fVv_FnjsXTrz$pu?oM|>h86(2fh8@^KMo9N@ccL;U zS-q;0tmYDGRZRKo_=2elFUB>h#xp3E{C2deO2 z|NLC825KtDHCpCMfwpaAmh7Tm>YQh#@JqJ7pT!ozH!vd!BHnah_`}NQZ%$+wRsKef zUxdiZPNqe}F}kAUvD~0^WL10qYnAZ7xB&TvP9_HCrSsnS!u9j<$rFJQ_`8ZxB<`M& zFRo>o6HU2WB*?)JpVlmVJ)6SU}N)X}viXYbhpAVcolSkG{ z@F9Y(VMK#3gG)({;jzhE4EimDFfXA!hmzk6wL;H%KK%!f6X_{x^d^0NK)+ob;a+q5 ziH!znJ&;E?8weC8&1WJ7(#`siznve7N;~ z+84=GY;CQRm{$~_YSrrn%;XI@Oe!cO6>CtPAtLK80yKA+coSGVBm^^%yJD} z#K>gUe$t7>xx>P|a}esM`6<&Z*AZL)Seeh#ZAFbD#z8j>V>TO|>OXoh-^Q&>=-J#Q zjVs#iqtL&wSjziKV`ZjNbY5Ni!KPPoP5Jj_5{F<0?2fu*b*&kZ(Krk z`WN$Y6H()h8winJ&L3&%P44ou_;@?YDvE*ibtHQ|Z2wrC4=@uPIXam==PHgabGozq z(Lg$Jf_+P>xutGnW;4Js*ve_=b@Yl0tdRP0;$fQI+Xu*Q3D`c}OkG)WcS1$281<9j zRiMmgKRKXOoe0HI-RHV@2-rD#X!Nu@dJi_TDz?Q!>6X?`H;pRz>M5N|=VzS8u0%tv z+hBsF^Kz6fm519qd3h)C0p5eRpr##%`91)(q9xP`h&+4`9(wZ|x#XFRyGCcRqF$H- zs5*YjF85aLYI~{MpR*j(sh4BOSR^Am?)%9xErg7^qgzAH0Nl*A_kb>zg$o`j*nKgpYPz?Q_40@NFd zleREP0}7 z$=jkAcQo)53P>ya55`O5=Su)oN^ovHEw`a#wzJVKk~kZVtHPNI*xPs*olc3pfxUx{ zRnHwUkbGLlw%@L(1uCuyI(G_bu9o=%6GZw_*6rKLmcv$6s$1>$QVu~3M*DURn8UVl zeg}df$ARH8ia+~ign-hS@qLjHwGmwl)#Qm;WYxQ9d{%?p67{-%ACQJtKF6n)h{k4G z{mQgHg{k&a$tqsq21DC~wLb{YrvZhZEb6CrQv*zi{bFJz*H-xhTyr)N+MvKESnJ@eNDs_b?AJWIYH%XNa zF+EjAu*6A&3+VHy!3n{CZgp+Hur6lxw*Lfv1JFWiklHdg92=uiJ|C}*L2%~_li-3( z2}T13lk7q1y$}KSE{Hb-33b$)!ncwkjVl|jKIF>cEG&cJ8<_(josM@}fWy9*axEQ` zz`r$qeuJ8boDg$tClL{At-qBFl-IluIPk|ucAkp%s?ivv32bA??{sS ze1Jk+`rz15Y$>Apgr_Dl{`MUgt9*0XTk7@66q+JS;dzQ`*uq(-1QWoY`TOn}bt4?N zu65lrIt`N-$nOSH9h06n)W;?u?w<$W^sq7d)rqUmW1{pMraa-tM3b$$WwA)%6xeDukLj_=b z$lg)>?4m!2NV-fx?>(p`S9~yq(?5N9iNn$yg;=^tpiroO^KpI=lh4$#gyBV zcgkWz9nDF*1Qh=QKspzMb%*}m_KFqrv7+#t-i=HNcubUB0IHv?Id#%vhEYR)z^`5l zSpf7lWPw+Skt55=?FH_2&pqHb21?U+G>^sS!qV|+-NLIU$ky+#|z z;2Ay8tpaM!RyXyy+3L0!CmKboIy}KoUDW5UW~(#rxG>D7Emj>UCE%V#DLF)t7w2}^ zsugMJhP?=pc2jmG*kcSYQhg5PPbjbtjQRV0{!*AZ{1;-sw{|41>zh{0e;=gg#e^&{ zYIs}7cA!8>GS1;dr_euFpdN=FYs23{7Sq2xeG|(zSpZ(e2wTX!Pe>cOKHo~i05y(z z5pujn%?kN?hp$G1Czy8TY}@`Ye>X=Uqt>Feo+K3^WpS+!RtT0Axnb_5(0~|30m*(e zol$Dzi}HN~YmvpWG!LeJu5K@JeT-8h$K%v}fR!!81o%H)#V5O|^UlJK?)vyTWK9Xw?mRXC znrEzIHuzw|vnFowvHc?Daj#YV*uuhAc>yUxD&eX*CwYDyFjh6oFG+3y&??@Jtoo6i zqtsCIT#ri}&HqM~n)uno>rI8gh4jfv4v7bgfDcX{U$K_YXKkw!RgAu97NqDSiF$aM z^X|$rtNC_@iN6QWc7qx_SFpiX6^{_|0++TU`_~BqZgNf(F;;-Q)Ci!Wb3!+37;1(+ z7TR4cTFKf2!#b@iuO=mrA*`KmD3_>;_k^1amarO$TDnzOJqIb|9o6EA_-y|IvA!Ek zzR&TEApTP!;j+yFN&<-$s7DAEGy8GyP~u!Az|2%`=sIQiaF#l;zrb#jmuL0iPOZE= zd%F(19#zB{{D~GL_PhJIIwkq)%vr8j;j>T3UUBWP*orHqLka?R)p)}X06ErA4}I{NL^PM8 zh{Ya@W_i7AdJF*SN$H2|T|imBB&EE@a(yB?P^$*(yw>}5;cQG3Wt;SSpVu5m?r*UQ zx;j+}h_3m&hyMkq|E6C4XOc~00zlGg?$@osFm(-=4Xg(DiLT^v4IZwX(4AuNeKkbFK2+kciKXhA>~c z>(emTxxqiC_OIWsADrKMMeJXH{qw`gbN|O?{@=b7|L+`7dEesc?s`^Nif5<+@?l>! zcrM&}uL?H^8n~M(bs2PvBxN!_mLF#AVHG&L?4|;ykE5{4{dJ>sh)GehmAQuOsx7@| zexk1C8v}9aM}-XeG(mg%uHs;EbWC_H%pBeQP!&!y-U6)`q+0Y#p!_@q)J2ON>QKkM}Vd z!zc6bbdi9Gl0qgt3Q@MdxwevxS|pCva)rL0;ei?thVzd76|F0Dyv z^}G*zOCnZ(x29!ll0m-gOyy-M6Aw?srp3;7j?m~tn@ykL2O00NfQo_Lg_y|=VxDNQ za^;0WsAqGxw`=pUOsiet-8@>hE9w^uwz;=qe~Ei0`q!u!ITF6SH@}Yd{sS(Kj)=uvbOb1`s?jy~&O! z9AJk}jh~nX{L0L6 zy?X9YQs;x?DHXMuH5CD~*f?4sncFidoy3b1xsqJwZTM`gm0(;{J}Csux?t(9q7g_h z%jyQVs0|%BYLbPLBGlg1z1(_#D$d;O+V#2UQOD(JmSwX*_^a_%#QL|d_UzfUdbU3< z7yrc*Jggv?*pg-rP?32|<|V6sx{BRigT>?K(hJbwfN^z-Jm_6 zK77lQ@GSa6R+5#~y-_6Vlx7=u$|>B0XFuuYLAPbBYJ6}{aqph}|Lc=p5#}v3QZ}(B z=!2I)6E_6xJN$&7Xq&)URn`q&f)S+X?OBH3k8Rok6hlG2%DIii?F zMWQVU`Oa{SvNtVpfiW}H&=OZ1D-<@^@o)xbyNP+5-!iz%JZ4k4!NHG@;Kx=?)AqnR zwNNM4P|MbhcCxIvbu(Ji3;IKE4Cz9Sd zG8%epb#t{?HCH8m9t5y=Lal2G+UTbB6h;LwJ+GoP^pg?0@ZR#~UFJqn@MqvKvJoV` zboD9cFpqVftDfR#ru<)faZr2Cf$>%cj!#)om9GvpGJ8AZq$c@Z?wX{m23XZH(lUerG}{5wuE<3~N!_bk%)yzc*p2Hct?{VAZ^n}T=Km!1i2}O$QT}i;NLF{_#UMc|PZ3jr| zkb{Fd{e0hMMy!kol1=Mh4M(1Ny?XNDKObV{^G`X`^;x(OPI(72ZUtQ}9)7uKHI6H| z=G>Gv*CJX>gc!1$r|!En_qn$L2|8)8g9>}j?N{WSlE+rtjU(vSt)zMA))}gs!BNjX z*Hy6ZQ@7bPY?b$4bMNDiLiM5-)HC_`hvA%wFR&Q3M;~g-y0Hwjy_NSQqP4Z*IXRWd zq>V@p5n;lcM^uJbd${uU-f({z+LhJkr$ZGy5oVIL?bVXes^vNP{K>~vU;W&Q6$Cbu z&bx0yqM(PUXS5mGkBim8zzg8u=3H8z$IgiXEBHHO`a#s94i$-Ul=Xzj$F9N@YYvNT z+42o_=f|z-gVR~e*;CD=N(12l@2SE#kxh5i{=#lUb|JOJPG_16g(`Fc)N#6fpBA08 zJV{dC>bp&t-q*JU!!OK{=TF7P8XM_U zId8?;3XL^bs5p{V*AqcGzmr!vh@Zgo-?c2q6g;1)50Y&57T&(=+&X}CO+NwO6i}o@ z^lZmn90LUNmaa0vBn=&;LbYrq#^sMxxwtNB%d-t0QV__%fS?u`HzHac$8;RM54Z5v zsqG95cNz9)z%K~}OjMxbOk*?JlPK5wv{$*xx2^e~zUf>3Q=y4^zpY3B5PihavYN1G z+?^{cgL0>-z?;OM*g~`w^wx!dJRR)19RuJGw!J&)wvMc=LhQS1XoCt6^`%2O5HQsS zt&&Gu_jQcbYyMLpDC_FR#poieJn8YvaOaKisK8#}sE)ESE^A7&C+HX`<=EWn)O|QZ=po?bB ziLLzsPA6*wUde0sA30-KEP2q~#4(*ptCf%=c%-w!wwBmyd`TqSW3}?^u z)BY{<-6+kPcCI|?^8C(KkAE`nNzdQ8z4yI;I-aPPgl{VhS%w8{t+>PK60MY#jA3)m zhxu~{uQ$u=9bY{@{PKlwP{a<+zmuZ^c54kjKUoS6R7m60ZcbrXKwQl(YSQoZGH8e_ zp}^S}S50C8xwUrHQUC(-!;^rx-?%Z{mnL{xq~IeM)E2r~s;4|(e$_o*OXqET|4sDp zKX~cOGR1w@?*3@l{eKrk1Q6Z5=c%Y|jz<0PLzSILyXxglH(f==rkqxBn{TVAm$$Q+ z-2;`+l+~4*shdet-s##1gmp&%J+Y;JVrtJe_A=uj(62+}x602x-CE@ye!{B(k(Bu> z*(?M)NSWGltE~r>52BuS4z=?CBgw*U4jxR3mYdQ@MOKl3oY5wB> zYXg5?%%S|Tl?!rLMxP%s>Q;0FiJxjxFOOjd@Yr7V;htZ+TMPY-M9o#gzvjoG>ei&% z`+4fau$AP`T+I@Y{Be0FJDwz+J#PU7e)JJz&Je_L%ge+oojn~TF__HXlsaBeoIco01g z*f~wTp8`@}XZi%Pj5adUJ#9r6+hZ&T>rq&t`DwQg1M*W7eZP6Twgxr(z$5Ex^nGfq zk7hW`14vUzeXSP0k!E$eu+?I%t$6(n1j8d;cyadRvW)2?2ct6jon{FSkx?Af{zRLI z8qcZr&c2%CeqjrCtdSBfQq!omS7K(d?i|vIhaqOSrI|2!nWnFh2QgOOO(V@8r#{^E zI9ov!@F}-gR|yjGnOuDF+l+*RlgU(j!NN3Iz-zfA3TbEqlE4JVC`wauHPVZ_Lz5Hb zO&_Xo>7(O(IWHU-Hv$iq(O+*2D^}onz~LPKW>hN4ttT^nc)4*G({jG1g&#waeZI1> zk;mZmeSE}%-JMYcnL7zL#eHrW%r)eC+1Wj8)WtgyhdX#Id3eAc9xQD}>MO?cnjOgB z6TVhSK=OY$2m4)1d`toFzqFgmu#yco&}Ex73#_kB$tW^1OsMgrOsN?Y31te@9t>~W zOmH$Mb^E;I{DZH6iFdv2`q-?2}LRyWh@~Su(gkm z`_wGe%Qimtt=anscPS2k7JKN;8Oyqy?J``iu zQ^~8PHCs+fGx>YjkUiLg7AIlWgVY5Xn=y`WLF*asud`qG9QVHX+J*z0 z@KaVW9(M;0&VBQ=BUiMgh#5W`Mf}4B>QT*N1#pHPf zr}SFg1R&+iA@Xn0VD|ZX_>lVuiw%nHZ;B4-lpM;r`<9s(bMr%-G`pF^axtW z8~xf^x}~IEP*7Y!P*kut`(*OE&K+j2r?uSQKJ{)m8M(1E!XW-(cCaP&pNIB!soi+j zgg7}6LaR-I1koob5GWio(n9%u{ezsg1fkr| zQ16g(aG&(IrJ+XvRp4vy0wg-dw6@P=sHlZ3oap0Boo%~763XL6Z)@qCA=5qOXxGN-ca#VA%jaF$Qb2L+ZGsf71v zN(I8ar!Ax-DdxsHpf}~?Cx;MvkE{pEKZFDi=svPe%Q#bPs6t}f80MJ-c}?Ak;3RiE z92WF~HGx$rie}WNmqRV?CrTfS5WHQV?1I;muWUH6-jhIlgyV_wUV$oxwFwlx_s{X+ zcl-~qmrhg1Yqc(Z@HA6m!xC!=*0BtQp&T!p5gJzdYcpT?y#3)fOLNO-`q$N~a6wOC zmD2#O$Q`)Z%<4B;wkM>>^A?EpqF@hKJZOi%KckG=FJV(0UZrh!y|qUay*zV5o>x!K zXYz3ETU}t%PaA8%Cd-$w>GC+x4OUc1%w!@-Npmp3>p(-x1%rpa#AO2`7EOPjhSZDn zB7|EZ??vNFQCVHR#AIEa&fmm3nThV2#P}HcTYWCj2#tR?f|R8%O-4()K07`%V6qrP zof43*o}F-zN2kebVAiz0GAxQh^2#x?2z#ymgaHZ4n37~h~5d$!S6SNF;^ z`Y;sr8)5iu8(oxNVti}N^6Nmfx2nHw74!f)7-)TOS-!V^)#t)$tLNQ4!wBHPZf!(C)p?QB_ZED_g^-_I$WCm1jENIA!gfKr8- zh0hxD<(C$-7TTU(T=QTyj1V5n4)-VU7MA*`&H~1FcY^t1<`NJ34@f;tG-ReaXC_Sw z6RKmIcCN)1hxmKncHMu6d$$(OU%b^V*@#9wHWDMFZy97e>>>K7=x-t07^1G7TZ&c4 zEk3uYQO^}Z?tg(@5NRsWy>vhhqEDeiIb9`^+a9`>aIEJPH_64~w>?JMaKlD=kxD%W z#RlHQ<@?-XZO3{9smAbIvc?z7rRyc^vtk+67frqvyB!^lCs#|@y;9w8c?x?ngTEy? zbQ)H^c{BSAr(h!TaU2g1*fO=i6hUZ*ts$ifnRt~t9cr-Yax$*1>}qz`iMpJ9Vpnjb z$@0|T@G~s5(8%$t`yN&fC~m*|H#FeC*lOuDPk0^~dZJkY^Pd()@nFeWp<*A%=NsmJ z3JsOwUB7%TQ~hcl_ryCLOTS(tfO+-fE8>2Ly5_@vM-zS1d7v*}-=RRS>7WfXY+(A$ z$#F*0%U(8==6!WmPH?z9vPUMrXDcme`CWx5Sme1Y`J^~&i99$g$}V4u`#Lg_I-NfD zO`!XJ^wT#ak0*D9zong=W)F6Db|&hjY%;u%58{tptfF8+LBwre-($_1R;F$Gjn!YS z`SIJ(esn%Rd|_ov+}e+$D}wc&zYva>I`Y+40WUgSO#kH@k@-J4;U9jo|JyE1-=urE zEKsx`>U2J6Y zp}&!{neetHYpuM|00MV{?z?J>3eKi`{f#XGB!Dn}V-K7*!!QYQ-EImTa9k(q=~`U! zD``-0c(TpuRJ>Y(GJnfc87@kGYVeYSROx<5t&S9#1YNonVLtSY&C)8+y8O-SVUOCs zhc>?QlnIMzp&)s#; z&U$j{MM;Zqc=R=94qAhdQrh7NyrQX5oHbGhtkVEpSBUi5hX&F0%?Fq70|3fE_f7f2 z^E?}n%)6;E!&C9DHi_~?-@A_P1CMU?abKEfcBg&@Rm}U!8X&CGYsdfk5-E z&gO# z{-(mGZwdea6QBJK6uPiT^9)_6H=PnUV02U8IW;N7tRPF?Tkqq?zj^yZu_kZ)SvjKo zDV!j4`#`_4!P?u7^%A&{9tORDn2N4jJJ!feG4XdO&?a_8P`cpzk#|)HQw=!7;rDm6 zwv(-*m|mNAP> z0aeMo<6P^Hjd|1a*;;HAzj07!E2o@cZI~rVqcq%gXE;qL$V4rm16Q!W)hP7qRr$2N zf791tDIkD9hdrC~hvyK02^*W5H;1KJL!3t^L_z(V?MNAz;gN-h@QJghuZXtZMN4wL zSX1Wmu#85SO5XbG!2!1*orwFB71y2*bI+K=`x|opSeOQAAJAiydtI?%Ekjz+3wvmN zw!`PM5o)RpdhEH3;z0gergBSpOLk%FivZ|cbbA<(%9BL5_-^6w(tXYmzvg+|ODNxd zXO#(G^8|Pw;_GDqt~mW&7X~O3E?L5OIcE|UAqN$Us`R`TthHP(V!Y5vv%_jlMl@;{ z9}&AJewX3bNz3OBm;}A6e)5a&@=dGIj{kuff0ItVV3-8vioxnVX{ltJH*OvG>D7#T^>?)r~khyc$u z=#YvFvX{QjuewbwXB6`H>mjnr(K*jU87YkkPS~!#3^xQ{As5n^a~;} zeQDMKh5Ah=p09Xbb+!j)#q)BJOa`c8$8bM5#+RY z-P&qfQ&m)XA?nlfcKPwa%?Rda?;;_DIGd7-XoSuBdB7a|JPm8NPApJ8yc7ZuXTt?6 zz11-DP1hp?!`HoN>EoiZ7y5or7l^StRdi0+U8TxZ>!=b$_~R9t9bNb$yJMWb&!cPU zvy{HvxC}1(7#kT>MxKz!i)~DSqcS`UHgx26=p>(Td@yAyxSMXUjiU+bNiW1yt)GvP zJ!$#ThO%Tji(RbJI{0YIn8n-zjoP#nxwzhjQSbp*Ka5@+qqq1RUvCO@;J2>L!}qRo zGbhtq{s!Luu4dp>R8$OK`m}slTfW4ylMU5}E!Wem>^E7JlRoIkh9p}{4rRV^yKz^m zfubKJX~#{)KxwDFvD6P{uB$M)*%V4E_)k9izc=}(5P`s&v{r<%tAyh|4cMC|VU?!v zWi57FQAc6Vs>KS>^tsD0B?yfm3gCaO;{Eb`vaD4p37Xo49+tXYi#;K(C zmb+k9&Fx86|3k%pZ}lIae%$MPH)Hg@c=^BM!l2`^z`pKSbL!}kD_>3d`-!XnUDNo1 zTLU?>`%9@prh0uoI~tr41D6t&m7e26{5|u=?vEq}zb+EbGp6qf#u^7{IuG2ZzHdYV zO$yX=UI%%L_H+Z_HhanDgwrc++NVWo=dwldsgSJ+!LQLC84niA7}j&6o1`%b*6Gsy zF5)*rsXHFI`$9GYN8Pm9{`2EW;dj-RBeq9jay!c;ekqR+{$sLIX6Y~ghOYf9%IA6; zZW@`g=0PJoRVaIlQ3tn?-RYWI!|4$DjLgOTduNV$k06ZSjFHYm`debSP zzx$z=yF__kaGLcU{dQW@%c>$G1L&;_Utt-lv_ zKu?Oy%oLZBGBKfk`Xd>tbc~p}k_GH{xwrljS3U1DOA%4lcW9;}PWoA{#&u!a6}%fs z2f_t06QJ!w;riRs>kztQv~z7OiH3=%%&Wibf>SgqDfmso`nI~Km{Vm*K^4Y1`xe?x z8F`*wusSE)c}a4ofGa0mqfDZ1eQ7@`V%g|u#d^+t@3`m!dGFUvm{aPI%^KxPQ^!7z zcxvjNJoDEotB_Gz>R-KSwX*s@Wj%i+0{mEsi!CE0?)0R$fakp;#65xTEq*8F((`Fl!S zO#@1*Ss#%%KPyB0o%F2v3<&{~+Cr#`3lzvYr}MYl@jxi~$-z=_cMB9Ys%&^WriQec zY&Yc(v~-s$llu6H_c8l|KS7|zB*=Z%F9^zCqz>0hkgK^EV?1p!NK2Szh41ztDAwhfR0t%*nV)yJ8@F8)IKj@ix z&`=KfQhWf8q+oL**)?Q6z4%5y@xsWY!e4YBms<;)Ay|{f(yc|2gWw#ubtEYDQ`rbB zy9slD##c3uxEzSbkJSiz;Zj)aKsvOTCu3lRV^2%cfCHxy!7Zc=O*BU3%rN^cS=Vk` zv;%AYZinXyO&GuMs4y%)*ZaWY*$2Ap{IPgZwN0aFslrb+vC;)kA4#{d4cSIZwsjfi z1p(y~m``QbbxHN+9IMH|YvIyv4S#AOWOM7awdEMlRXnG_eyX+Z_=ip^b51agA7}mFvqAs`O0y#FI zKr$D;@JA?9VC2^qx)5lVJ;csCkJW>3#)3Vac)vC}%ng8xzEls2jv9{ER-p4(Nf`K{ zmpRJY8PA&6cdXHU+!`KVH*hK*>@!zXjho0zJTt_>(~7PzAat86QJE9c`&2;Fi8~hq&8=wBm&dC6!K&cw>ncQq9#FlIYrsDnd6)#WW--In z-IS5Z{FV8Z`IMpQ`{5EW#q7(>Ip*mJuJa%FD8^;afMz0!y`l( zV4G9#3(!O|CMTw$NMhcQGzINDWCWsKAK_T(2qgMG;_Tn1x(vq%v(a zHx%{aP1ra}?lFJ4rRO^6f^bjYKK4#Clt_F_U0zZ`a6WKBRf;5~d+Jz0ONRC<@pizE zK`>WosEE@JSJ~XRx0XQ}(qE#Cd&xlN9r<;j3W)Vj!E9O(>uLmFiF2r-QkLr)LF#8& zc4G}|)ibR*3!@^&%dIj%-HFAA$&l4bYmiE{sjl^-8#O_~9pv^{W5(c@pF9kTgbdMrm z?`gpQh%)r5RT}CADD0WC)&*N1%9V^Vb`79|rPt8dl!RbrD#bywqU1W=N%7_JI+KAJ)1krzUva@tK938GF`lx+(?-A{{VS`) zu|1lLsn?@aOUj*&x^j7TF|qKI`bpuU70?41(?fvRI%i22_^R#X8Wgi(*I{Z0%H$R@ zqtk=O(3V5&o%@0W3V^Sd788ky3BkFqSYHsSD`2a|adnpLo!;=^6@3Aer+HEU=2Sm= z-9zS!0=*>75k;(V{CWlIALiH1!u|O-Ey?zzf3ITry@+T?(ZrV8J-vjlEGOIrbCf~n ziclIX-v~K+M6oB1H0>SKgz;5W*cWk2&n}u<6~N9H1>x*5$(K!%4L5aUrsB!1Ac%U1 zrm)O805sgZP3;S&nHYco@&v~QC^JtGE}v2oIPMv~@C7;DP7C$ganzGhK%YXF^og1p zl~FH?Q~YB#$qF*N`_rb)1x}cGo41hlq!32QS3rlV^c#jwuoTEaHW@3Rc0C;lxIz$a z@vu{ekd?_Bu>E|h0^;RWpVvNnLJ}oBl#W%ivE}|+c27Vt-Q|%BZ86;yUeSY9aS)6y zOd*6~;$?%%gkbu?E~cHYU2VYR&?$@O7qL4_WOee3WU`+2p$*fV(QNlan><&4U9qH5C)u4hbAIQpi=Qx zT3sOZQ}ksdyUM5BC>wgg5Z>jBs0JsZT4!-%kLhH&nwx-<3Ugpgu z;U0+EPK-#rCfznfdcXM`_wBOnbw|*&zLb^#r%TuKJ@@VN-dH@KniD9A_(_wS=c*;- z1zNBETO4ynuLJRuYv;;^f^C-ie>CfOa@PI0)E7wbAHRM|60^!iLPhy|YUIc#NDXAV zRnHS4{&cV?dUlaeBBXE6YZj{Al>Wx4^|p z?_cXo;B6C;#{7o3fkqqxm;k{@CO&#-`9seu(;6V2LRPrmm@C|GL%VQ^LbVPov?PJ& zGK865;!M}LqW5)kiUP|00Xj%MP>L<2Kl-wl%9Lbuv0ZwEZY^wL`bdOFJJ!5reLmic zWMM6)bR4X7%P%vEIUTBgYCF%-Yv03$W*!S!5~Zt$E?as#LKqffXj3d&>ws{<7Z`b< zS+~kxKSZ#vLKHKUijkjp4bp>|OKv~wGwtTLqd`K+tmmUy9Dk~cVeK)wkssCqO`)d_ zistlaYo%MK%eC6IunmhEO$r7ZI_rb8nLS4`KQ8@#iFl zAWN300SX^jwk%Ljvx4w`sjG(|6bR_gfrbsJ#eY~;giVj60O#PyiQ7f9!5&2ySQJqe zB1(#!qDS21wG`5e*H3{X9#thxV6E0U)HSixY`EE`=CM3Tgy*Ie;+Drhm)46sbMT&8 z-iHOcM7a(*NABt>lb0o>-W(45Fqc@^T~ng76+80ztmWvZ<}m5>+8BhJYr%Sz%O<1O zY4f6fx3CF2F~}@e06KEhH(R7Oae^(TzP0Cw z3ZQxve?Qcv3(HGmqEq@Q;@fp>WBoLNlWiV#kA6}{_CI zcpkJ-Rl}t$eTP6I<|62%oIiXIf3fyRbDgAyv#=uK;6VYrZLBNAfDi7$8OlrJI!Si8 zqS8q3X^8jh2UOOxQyMpg#h0VgfCyJ>+V*IV3{45@xf1PRVpw3!Gw?iErAM^ufpclW zzN9FNIos=s0tiKcly=xB(#Kr_g1qDH43nGlYcYwF0u{}+*LyT{ALE<=|7ce81`1L?zaGTMN|gr^9~ zewYjN9xHUGuhVuHzDSE%cz7bk$9>^Vm7E%P|9noR4@o0FRPzeV|oG4Y6&yw!9EDuAMyb-E5 zEQy)&>9*3nQ(K|eDu#tD_`@T>^w?s=x&E!#;iFSLrJ|n4gbDJ}*acTM@2Ri(sYy=c zSXBi_^36mv(4bw2BGIW=El6;jTkIW39ejPB`bmtPCmiZe=t$japb*p8h|CrR7reOT zTI{)hv_7)qv06=F%vDbl_|j4%O@~?pJ)uD4U`?aa!zC-Sfq(LsJ)F7up18d zST>bDo4-Kcmu|6McL5dFTsK&45YLfabgy~P<9J98D4iZ4ouPiJv{V-GK^*Mz5Uw`qhp0P4*g*$OkF(HsicsmBP3Kx~uzzHZQ|jT$;2ugcR` zmPB6|)^6n@eKjQQFj^P6`oIBD#HRMT1$J}GAY<^@L{S2@l0gNBt?&4!?qgC^Gaz*5 zP!gNx=&`yQ2P_7%TJNX=I^_W>b8~PWk}mkeidhA759=`QFh#Yjjm_T`X!a93&kM< zA2-}*;w(2fZ-&Tcht{fxJ&)gUT-mw93LBX&8~EXENWAFww8Q!Il2aj$mg=8kQ(98o zmgB-w7vSd?dkP^FW~6~7t{=^B=+$Lk(@Y;8|FX@>oDb7@)F?Hyzki#Wb>QlUc(ThA zG<^D-G?opE{4Gz)$M##!>0MmZH*}GExPWh8zy6@B_H8{>kJk7tW0h9>EtBqZhQzl7 z&dmRr+VXy)6+i10DjU)n-K7>f6J9J_YI;3^?peFp1q6rH z@Z8R$pM5tm(*g; zY(?$}*x@g|sZtSvz3~!ZaaMLiGj)RLyxVm~ zsiMf;(H%VP72Oubi4__Cdx8G=^g;87H8SgNOZt+58@~n5-}{I$Us5T7uH5n-Z#eXN zBL*Y!09*mT>Nexqs05cit)?n1IP$W%-0NYRHb&|_$e-DF0rqN&b2eij#ZK@lv1a<> z9)>DN>^(=yb4#8MoPK_f9LT4jH_S^MjyZF}A-$^eM7u0>m{N!wbn*RoTE=%Bf&V{wM2&dvil(H(&(q`=Vmw**lzYiQksS9esTe9)Ap$D z#v7;hYk8$%?MJu=BTFodis83MT-sAC#{^^v2G)K=O)rbzqGVueM~*?T_G0S1P1}Q? zAHkti30GKi{8vrGj|GKlRwM`*<-Tl}=3;@|$+ffVG7F%Dx%gd?0{U^8=4e?&K?`X8 zz8=Mu3xaIzq{4HDY4WjjKuWnQVg+K#PG~MB6V?vg=B%BI6gwz8i(9MUIuo0BuvS37 z!}$DjX01ant%P$>-lvPXKzg{OIgIKOJ5&ke?XFK64lAuHVXs+JJ^HuY0Hjl)n8|?* zGXOc<`W`-y%DuoF?%MUDo(48yI$;*v_h71CKk~++wWtR%^KN@&A&Y&*gR}WTycWlW zRuXh38o1skr^@2)#1WnTp&|e2v0SG#f+L%9VbBz7ycl8U-`1dYhcfG$T?-!0xj?ij zx-G`mHfDb8Jd+(XrVln=oE&^?`v9qJ;svI)14Cn|1l26|%jnn{wP$m$CJ6QRe%y2z z{L&D0BZ)D)8vG$Vpj1p)DV{l+iYR-25>kNAsZrU!r?feA6U@}xM)fGY5PT>=*% zucc6&1Q9!E{)a9a$wlbJ8|*;HFM`* z5SJHe#*0h1nqzZLWi#~F61b(V%s|JpK@gyJAv4PYC7^2mLmn8-1k3#m4jxSt@Z}GK zrkK4(eFHHxBd%YWp$C10W01jWGEs=lIp452+1Rc_Xc>Te;Z+-Xli3obj};jh;p1BD zMX!u9?jC(ccn=E#ny7I)-{5-CW&mu^47x2VsQoawtGD6Z%;BTHUKTF$;!*_bCf@Of z0Y*WZH4MT`Alrzc(TtSfUR!200&j~@Jj0(LeEoWxhq+6eKMEKzP2bzm+hDO&CL9;Uk7bNS_mV1r5E{Uz^u@X-rK>YQ#vz9Isp()OS!qM2L#q!A~Ueqjri+GnNNvGEmSwzyr@af z;1w2^o^6osd7*24=Sf&>6>xGI(4g0CctdQ|E)x8uPFEv~nN{OOzOsig!d`4)n*=~# zMMX&r%;)CZ8bBqKLSEf&T{MEpzAtt&l6%h>apw#pX>uRu0vct75BuSb^eXecHdR*z z6g;D$i`l7uT{`Q)O>8u+Xs&=P&2BOfU}0m zgK%aSP1j$E@hZ-ENa;E4M^bfUHlL<=l|fhBC#Q|_th#Cs>4cF78f}gfV;QNMgJ7}Y z1B9@2yzI3Y_T>1Y_rs;JLbs{ZIsQ4CN)oHNiS@E~eN1tqw6Wa`Q(r20e(IKfOYtqB zq5l#4;V`c|uOdQ4n(hQVx#EQ|wU^yo3BsG z4ZtOk**c}t15<&o#3s1!TfA9GDAG*?)qO|nF9nT{`J?A$)sh|P*#~d#_dDQaaV!X? z5u4cGzM^Iyj*i}!b=DSdrM&)Vy5G;U*WkiFe9l;qi)uyW5W3%k!PJL}Vkfu-m{%@q z0Y$&XPuaKh)+-Kif}yiN+IfGEhRCCR-bdVN_b-7c>}@Zi>MseFSlCD>_eZRlk1Kt7 zjeb6UdDjLCt+A&{NGQPALjC?Zp+QQ+Exkp}#~zfV7q!s5EXHrQ;aNH>!yHrn{F-_{ z%r+6RkJ4X3pmN@ii69l>I|7~<4WcumA$<#Rv<*dP&yvJOpaFoJRJ?o6D7OAmckQzg zg9~YooPKwiIqdvT*O>s>J<-?C86nQ(#y8lHF#3+~pYL_i6?vrScn%Gg-808L8)xt# zrNS9<4t6gC*0uQ2tubx-^_RK7vM&iz)f0oq4yjXK!!$RdScjdB3Do@2z3#;=gvJ}r z#`Yx!B9D&0Rzv{1vZsfdpXG@N0Zus|jHPqy-GrHeAbh1nG%zbgb;!>+rl5U_!{8&O7KT$5DNw$3u= z@e@pnPKS7ujK=UhqAh9y?~g0fydbrUCrmuyc*#kk-usQdHAt8oYa-w`k3ROWZ6!t! zy&a%?_qCj?Q_mPjCmSR5KJa8?tb}cuzEvT5W@!C-PqJm6llZ6!d<^r%j@H4=aY4zt z;5S99oUYKK9aCiq6Cdw4at1fB<;Axhun~Q#mDZCdTy}F1Y!j|G>(PQ&5Q8rs-_IA* z*jAPXY0CDX0lr~>Mf4~h!|3qFP@0O^%^cbcSm;M@MIiUcTwG*Oi#pcHTas44LDz{y zcz_l=&ujBM+Y!yx+V$#zg99>1^TZBp9MZf_uuZO;%~`rs zH?*x}1N~wDS|K(M_T4Bq*ifZR;y@oap2wPH_! zc2{32tFXQDh6dF*J|2ORTn;qKW6Fc|8oh;SRL>etH;Cz?&AXjs)$#~?LMrBiOO8i7 zW=gzRQ`ps8u!H@+526#fS)(k)uK};9^XP?mmEZbh>T3C1W;sn@^?D7L?8mV)+e@H| z?97;-a3x{->d3c>t2JRQ3YF5z2_N?jIFMF5S@Or?J_?}ioxtO);fK3t5abC^|E4;6 z7N4LbO}sBP3-FCJz>dEHKW2|5xEPv9^BA0GF-EbU>JzNeU_IYcN*+4RmW(ZLIc4e) zSVi&p^~~T@)2%j9gYEIDUr&O|h>3*dp^8DTN_3p!IvOVGw^z1(k3SdL&mF80ZY}+6 zyKmk0J0yD9SAiKuCQ$v|TA9lU+s}XhU+{y_cF!;TZ%3RBANOI+q*&oEgw&3XcHbHqCX!I`Tf8eBtRec5BX@r=S{KEadw2PeB*ql1a`V$O(QT9b{l4q=`pkL67uQ<9|~@$agtW632}HYVbp7EYUK zeMcx$oG6G|`4RguPB0cftd%)fF4qsg!+TXwm?Td+$ATS&8fU--iPk#B%jCud)KK+OCu|+psCg;e1SY|$tTWZ-nCykg zsA>nu@#rbo^&TZ$g)vc&8?$aH68JMI81x%nJf47+;+uo=qOi7^I4|Uv+us#>@!VYD zYq>2M47(dZfM-t8)6v}*zC%)#+gb5+t-L)Tm09zh| zAS-23pS2H`O6Ces4 z#ntO&QV|a;H9Mn;*M+ws&>HN%+1v-0r+oCJ@=XrV;<96_ zKr#L6b}OyS@|gV@Z`F%d2lu8?JFpG&qvC+K`=_p6Jg0os(SL)jr)x`xX;@p_Bv2E9 zH?v!(!ciWAD(*XM@ffW3$E5|yd$f*y(h3)@_*Gs24^92*@Mg_9jJVOvvyd*>_Qb{A z$j(X$cW<=>_DiFnoN$@P}0{LTKyBZ4X|Ux>^m5c3!^t^}u!n$yLrM5l9D|M&crJK&<3*84Mh)X$r@!{z$^od7KKvkzJgR=&PlYk=nh zV8a%DmH#`S9$)?ws=&9u#~t#q&2L1R^<>c0Fh6hJBEqWCBS01h;fI4muh>yo!H4A z1tYT@np>@RaK`?=5=F~>%ygqGcv%@j5_O4KKJY8M);=g{wuJ}3P;5W6g?YmkB17|i zOpN`ER4!w5p~b)$fF$}WZR~&DIt}pYuhE%7dEAl$4wGFjiGnHT@PhjUi$20%N*iAh^%!~q7ss=c2Hnz zOgrs{Sbkcy4KX66*Mt+&EK^p-`jRU*idr8^P5?S<;v}d`OB;y5l*cMxTCDX-#8gds zX#EbLpyOJ%lQnij%VyF-S7fuwHlDv8ZhsGV3D{-f;FOOI#QQDMfXcz!;CwJ!)_h>u z=lcFwTl9taMj2FU%T`(;mmdWe6of?^qnrv1tshkfj=xTKL^jGWm@RyIE2pJ$-03pL zSXEjhLpVCrt{H?`E)8GWtf94_|4j=F0z}B@#2Az1_VBDT;3SCO4x>CA3I7bBu z(M)q{^kvCOd)aVcC+s#ym^Lp+8~we+et)=zZjDemcEqOD^LKOuY}l`96Yn5h>ldRW z#mNJy8EHF0a}Z6apY$lc7If9j^yT|TWqFnA*|{S8!fe2RYiUMw>)umMlxyD$=30{c z_tKsl1loUxokjdJJJV&lmS^p+h`B4X%iSM1c*wxX#(bvs zsob(XsW%E}FE3m{zc%@%K;!U+#^O3q)Vp=}pa8UFt=&wAc)5QP{>%8b;8Dk05U;I{ zBp+k8(tEEb#0;4w%^JKo6Rt_n6fgT^LkC}Q-8A)y2+3JS?akZY1_5dGnL-i z8s@>tM^o|Z6us)rvZheL{91964i&&ktB0W=9%Bzx1_yv2T% zc)NKi*GxC7L;S*iKCw4IUmaf)`{1zu{9fdqY<%sb$%{kz03XD5X6x4D_jay%L}vWM zJ;d<*2guJCai37-b82wO>op5eXMxCLkU}pGOo^e^{uxFcKTZRX7?>)kqL+O>Fs1dQ zrdu05m_gJy%-uZoBSdTQP}9GJ5&)-%?ZJD2f&Cy%bk5MEwskuZa3d@K3=*DtGri3) zP;fK4cZ{WD6c}(zqEAO91b$LjtrP_#e`Wv0BzG0iZQzZiU370fh-F2dlV=1+I+Sjo z#93>4g!_{A=${H@_O+WH7fI3|LB259cVHrX!_5aL3L_uf>ord@5}PH zDP@G~EzNgSKNY#^4&J-FESZQKQnD9MIcdd%rP-^sHNJ8vMD??oWzdodzhv^Or$J3V zXlX|Xgx@j4bCFMvh`i|fH)aG7>o00e4CLL&;ZUH6u7ouLg(JL{ms7C7Q5_V%dr}z~ zNYR;VtX}jmp*$0Zm@o$nYX0Hcs`egw!oEuJ zBkzx!@eY?|2Rk<03vOy`9r(DS(}5U6J7zP_(e*pye519nbNhDQQ*?S2b>C!AeGx1c zt9HfRWFdlH=n+bR!+_wS2$M-P6_2e!E-W0mB?*EXG8=gu({#)D_|COfEqw~x0;ddy zn+M%yH*RkvCDEJ~seH3cDzqc0XWmtgyW@_{$3jMe;7KoR_ z?9oj-$5OhYNo5wp3#Vf(&TIvAb(GLk%qlVHW4ad{bkDQ=F?65BeN)T40ZaiMbxY zAINdK{fWEKwrQ=$ae$!tUj+}aWX+_868Jvzd zzkVbrgUNZe$IEQM?9+P??Nb&2ivgHF2Gn4b#rY-3+iUEMr&?^M+&TnmyB>2cLibcx zKw5;59nwr782yafbEp}5HB5x~F4_J3AC*diyuA}9lB4awr2y0P!ZEVn(}b?u382_1 zpR5c36#!*`(<>bUDrFA*Y$DpBc(1&a?1!U73;e(a^BQ^2*cnvaX=l+sm#Q}eX3Z83 zW&1xhjmBM#!`u8;ue0{{%L-aZ%eo?(rUH&^;*x9D0j>2Z4rg)Urbm*SkPRo>0ns2oH!wyRcwRZ7`8UL zA)>B!Emyca;Ab3(&Z&#Uah^WwM2-qa0^oY64PRKxVwOfOrbvPs_0>TbbHVkVEb(YG zad6`4laXs)FNB=>4tI-o7CO#CS~KWLOO*Hu;>KHb=2~K_n{@|9p&yiK>=I-eN&R_( z%|r=)lpBTR4#b!c3p;I0Mk1Rhd=Fka;hN21}Pspeau+*@f7*pFs_{)l3nP9Jy$04 zJ4`QSV;l;VwABWi3CWT!EPb&+6Ai?X-+U|$R=_FJXcOlBgl$EGA`*_TJ;4vro;DtlNv&{9Drbc$hI`^59mB)g=He%_WA0MG+Dx1bktBs-}Gy`uv-i7 z#}1B_ZgjI&=tX~10E0&&$qUiu_@8?Akv~3*{`hhgPs&HCAaA!_8^5NprGPmAS`Rn; zD(|m>nm~8N><TEeA*4P9$wsPn-%SQ@`LV=T78|DJ{cHa+@j`B zuUegtflp9?GcczUO#OpUKXOJ8y&BT=Rd?gE7ifxn`kC_((Y~X=Q3bBYa={u+-B0}v zf2*qa1ZQ0qOZc zcMsa|@w^%s&vWt3lZN<}{)s2S1r{;irS(_7;ekdra5(`0q@6arN7uaIUG!D?n>DKj zh77ro9QdiOoy`V*(YLwv3*&R3PCmJxG5dYa!FTJBb0Kfl=aT>(x$5m2Cerv0&lR>0 z+`bv+;;(<77N;Mct#MfU#UEWyY1U3+R20fxwdG&>#UZi#F+Xok@)c&_0z_?FLf~cF zh!tnP;f(1V!Ic5j2vJF1zu9ehY2)e|OQ50vJ6K41wf9fE4*&fw=2(UWD#{Zkvz-)J zs=$yIc_@rD{BjY#!ASYBu`H~0@tBEw%SM^7i5MEY#9J0G;nlW9bn=t3)|gROC`FGT z#4~5L?kT3@+cZ8k*sGp=uKoVCsOiDIL0S3@QO7%3m?BL4IRMD!&N)Wi6ovP1tz&&nm6t>vkC6PdMjv4YoP~K0X@Txwb!&G8 z7#)G>=AMFl`ADw}p=Y1d5r#p^^Vl_(1y0{lY8o>89jW3GCvB$Ufilh383im2CPK$! zz^LRH()?n@GcR;Zv~`f0(a1SzcHW z#+8HxOOMPmEkY=)5{@CGZa7sLDOa=`DaX83}^9c4Wr?(<$zhI9`OUJyF3Ff2llzrL{f_;kNVk_DeLeWTJm6hlv@ zDv#oBnXXez?&rUZzQat8DxDbIeOyA_yU=oe4l^c`V@`GbR6|~rWRNvY-GmTt8`VQs zgcpSND15?KR=^XpI#BF=;*vH?qRYb+)Xx!=g4(7zT{h9z<5<8P8gf4Ikw#wI-iS56 z1$3h{!OQ5o5^mFAaLX*Otp)M+*rwzG@EU^SU7L1JUn&C*Pyh61SZ%_v>sWt+N5JUz zjySt;Gsq_7M;lP|;Yr%Lt3HNnC#tvuk$Pk0q%^&4xlup2v4ILfP$0CPwBpr!Q?FpM>f%Y&QbWb^CN)aXx6>tU9EcZV~OlF0?aGs^O8_v@&`5 z+ux&#T}J@+0PYq%IMr#?GSeU%0=Nh)RC(z zR2BdS#>s|-a&WaB_V@S7FCw`kfxzMDkD!eIhZhTbJ<|S6DRMFO6*qQICX}9ssBB9@ zo=T2TYc8%sYI78or<*4#bb}oWq7qo}W-nUpsU(*Z0I+uW@|oc9um6z+`2X{d|GYu}yCq3MxbCWS?5m^~ zmx0IE>a8F8U}=gy4bm0p@~W5?LS7Y>0=pd7?FmlnUg)I1+Ef*=fO&=2g?`PIa6^|H zoVA>1Xfrv^@-|F@wqj6epHFberhool$sVRh|#f^@Ns| zk01<&<nZT;vaFBr)Laye#(J;G?KAxT!^*^fs{Mwyg_CG zf}c&D%>R0dE3*9Hzc$-I@DTmZ0a|(Dtguqhf01cxC89Ncec7abNg!yMl2s z5rnEn4~|kO-=&mggT~R*8};6NaMzcnUVp6J*fKu?dtR-_T$uKV3!>J_|3kFVm7DK) zCw^=3>W`q}LVnnul%!{CV`V7V@z=}0mMVW==;YR(Y#dn}<0M35LY?_9=a-3&>Hrfs z3uOyLU-WLL&EW7CIqmjRA;-tOFQa=3*cIZ~LeKm$DJ+~)pyNCPK2ua3#;E#PY<{Nj z{U2$?R>>Ks1mI%_ai}(uRpEh!Q|V$5S^r_OJ{!w zCWCc$)>wDXS;NP~#KkPa?9sBTb9-Zk8+^6FCjz7%j+{(_W*YD2X&v93uD)=^{)!M+ z{f!RM^P+{#MPr>0g?i;JMqi}dz6qJWdcj8Hyo1VEKJ>==tc8vHF@?H>%)k#&jWhC- zI{LW5K1NLL8>+{P^3ZkpPC2$@=2UHA@}V_Tk50XQb7c0U7nHwFaU@6-FwvgWT!g<+ zYH>pEvC+l@MnebF6Q)25XQsFae-{t<{gt~(uYUT|7URFh^V3+YwKxj+;CZQP1m-tH zT13PB27tq-z!cOd7diFDqfAF>?RR}8r9tW?HO4U$zBCk}dj5eq?3WVvjW= ztX>gq!Y@NSK(|{$LxS}hqL*vE{u!n9eSRB+UK1|PJo0K?EOdN;j*C2ENd@77h9>c} zZ{#vu6sF5m^wC`9x;=^glDRW#qiRe*0&Kk{_E``bHKziIK)iVQ^%^qp4Y_ARK`U*! zbsK2hD3=C@ziQAVfH*YA>2l=uI@x$FVt7Lert=Z7OdR$)tvC(cev-hf5}4USXF)4% zqzjIPX2vt82CKA;Sy9gk&6=j*sSq!N7ndx%Pu1zLYnz6AH`KXY_r-Y9o%y#jZQ?F}Q%EmoGc)bF$ zfN#3}WP<7XFa^I^3vyTDImkvmBG2HauHIT@xXxxa*&x0M`{ahXGcm$f*8`etzA?b} zx330irJHHNAl{gt=@%X#-nRq5hw*7c``nGT>-0draO0kBx^9dm;upDVj(Awq)%S-P zRF>Ix9eDJ)=qRTEe=%Ou3yd4qKRs4^AMdW+uS#;f74Y-B9Q3zHGhI*GLjA#@lB0L= zk7U-UCq$k|v(p;YSQ@r_&6_GUfm5qGN*xPzA{eLC77yXvwWZlbqaqAa3B z-{j%llkIdmNsNxj`3hg%j@X*XH&m4^lM3MX_sPZUtUn!0^cTpZ=ZmQp3|8PfDfpDQ z1t5D=U!wKkvU;`ig7|0YI^5;uiHsmvjI5H zCd5;tUvm3wwMa<|n_?1;0kk;klb zFD9D!7AkVgfia#rm_wXtR904rwt_DoG}MvV4Af%LV3YP35pmq zQb1a4!ZAXjtqaPARb0C6;oTL(Xd}z6b_&++E!60G&j7HF-HGY4L3Rb#uv@v>K8%h? zg2zlLEH@C%iwLr@H0?5HlqH4f*=p1==d&@C2GT|8eV%Sn={t&M{nPqt*s z;BrHwDWiu#WhX&%4yu#TVGcz}BVlLC)-f#3E#S<%H%WcuN$Cep-N$p37i~0y8aI#@ z7Ee+!MJ(h2$4xCUW@*W0qcO)v8Ou5KVytbG4b?DF7XRep3iMmySX3od0VTFce0am! z!Vz-|DkglKAX5sDSx5cC;910qpMd+pq*-0G!mMN!V6&8Ib`!d?-n5q;1#!!54!8oX4&*Jl-2;ll1Tn;AXRHcNg#dx=qhqQ;mKA6 z`P%I^{(9onADuQ}I^A8>aA~XAAc;19JPa|h`&aof7tS4x{DA0h%7L)eBm0f#9*>2G zP7_W{t^0M_{tATfaRN*kw+M-7jI_x7B3~ivCgn7ieeJJbdn(8Eao(EJH7B*Y5FBik zEQdP?O$##{yR_nou-3ShKfTI@>J|dRXG1kHTk_M?%D$wbfbffF3>vd)7uM_wx7aDU zOW27#inzok>?v52im@_iG$d->X;l`6`So;tm}bw(Xw^9=*f3&0L_) zH8y3#T#nhQ3)eGZ$WI77(e|yn1}d!w82>Lt9PYXXqbkWx17 z#r(3sEy{%G187-Fcop^E_1s^ec8$h?qA}is6{94aVFz5jJnp3$wuDv;v+D7ls%5UO zvwQ}9jRpIXic=1PFuN^b>^88;aHJ<~ZI&3@^|+7hng=V#7=tkN6fuR#_fQ`{;#ip;i&^Kn!+^NCILLfdy_nI^mO);(C{E&oO+X!{zBTJ~py{J!2;s(1z{>GW zmK*4PjVm!g5X(EgT7{g1mfjl;Ou*J#%a>hlEzFnsg7@HButs03iZj9Hjw4AVDueKl zml7EMl!}?Rv!n^881oP8<|8V`TLg( z;s<^1$B)?=fS{iqIU;=;d;Y@&ohm&A3^3if<=3m69$;(uHIZs5_5^gdEX0J>{H>y0 zt}Wb1nr~mA)ZUdiX_4Ynh~oizRHuzN@l&m81?RH;bn3_gV<--o<+3(EsS}~y>Vm|% z89wdV9@jY3fq^!U<{(;p<7(pStq(Qf7e0)6ugp;yl`IDT-ESVlL&^`1p&*M8E3los zl{7lMq>O`6LTwDsid&zC&&?zaYaoR(f658zZENF1=1&9`UfJ8xk8ZxD>^GVIpiqA+ zNPZe_2)5uHZJba7OcplN>jmdo;nD)j5abp44I93Aa!Ra{i@APDPWX)cx|XM6e>1Os z0spM*f{k(RlT8%I+x~08_9#A|CYqgj0o_d$Q*B}%vGwr85PBhgkiT?NpYrG6VM%To zYZ+w{^k(|5t=5(SsHkurJ7l4d23t6c?36rOP4Kk;DB9N_d-ymA9)r%aUuCp@HrSMd z8U<$2s@DzrZ+p&Ld?4=)FdJ~!A6RwT{zxhxpg68V67c3%qe3LV@PfW30QwsfN2l8#cE`s3p3s!LlG z({66-ICm>HP*CHLXSep_zVE2dQQX>J(>T>=)@o=|X9#D|)R#{qublrLfJcm`xvt`M zz_4IiK2(P!UkK-q+9jVa!tazF%^{R`9!SIg(nT#zL5I&Z4jrQnW`OcGf3BX0fUSG0 zD)lW-3lYz|a{Y?D(O>lWulo6)lUfz6e80U@)a8>LAiasX&sd@kJ_wT^| z2#8n#=!@DzZP*cylTn=I$(EG2$ao^I+8-??P*!@qR4?(&n<5`I52SxsJ)y&fs_hkR zJ{w$BE+*q@E-P8Ix}m6nz$;3JtAXZR$!UqwbzPdvsS%u|PeorczR!770%*#_8^56D zWgq}s;6cCrzvd2m&Ht1;^uADjBQbsCY5c3tLp++{hPx;y3M_Ak8Y|bWI4G9yE*>#4 zf}0Y^@t2)4qmICI33sa<%;*@+V9>Mv_*5<)ZIQ+79!QG6!irZL0n~b$0jQ1BD3s9> zFpr3JjI52t*=G_6XPTNYjm?x3aR_zIi*HGS|CK`=(vPg zxQWoTba9N{*uq*I!-kJD=@|*idhhUUgYm(7@|kz+^c}RP!}D0X>XpbbUQl>}AOd34 z(aY<^$46UFAYD7$6X(iU46gE$9_M|30w%P|rm`*X&H2!Ca3gw7e+Jp8!F$Z}Nkf?k zy3jH+sYrPmPUOYa%(d8@ZK`;dXg;A8%c0MEhg)A*-~<;a*E37f66-9}E#(QKw~gV4 zpXDy&jpa4fkl)Q`~IUtVPZrZb4i#rGl(rMM!Ix(KzW= zbaiy31D;w}HPH1$EJUp45l4K-7|XA-DhbW4K6T?SM<#O4B4=BdyTGr>XXMY()X`Z4 zW7A>3=3K^ssMh5Z(c8tf;@=ZeYd~PEEF1fMhpl(lSCGp;5w2}!y5!568i4@0BjgSz zFwIM2^!2scxL3XVo%-VpO|lw`KM|sUw?8hzFsVn~5#(wkfJ%@*;O4Z&ht9fgI`mTM z57U(yvfEF`jJEAUn+<@qI}30e6tH6-oru{Ftk);iEXYGtalZY2(AxW7{XnpHX;q-7 zK)h1u0rn%V(Am!N<@Oik#VvhPdZ0D8y0PkqQ0wp4@tj>-;oYOU%)zJsI8YPX0VM@h z4w@QsbT1-zHKy1HEI=;(Xm#F(_#%t(fPNVgRX+1c{XptK#ZDuPt#k{37TVKIE!}OD zw5xIGLkEZfoU^FQ0W+Y zaxVNthq%X_fZq@a?;hxMy_d16CHTIcD6hGX4m>MphD=?9)Yuwl5dZ2!SSp#4H<@O{ z^81BzeQJ2&CYo*iTT<@lz%#gz6daZGAZV}Vp)dD;>^^yG;8nMCnvSUZ%gtN&A0a(F z5am?V@UBE-UDwB7a=-bZInEL89GrP~nj?4Gje0}V+R@dnF6Sii8)aj?ymA~RaJ*G^ z-yybq_L#C_`Qh#PPE*CbWeh5qtUfc==oe^avyN;@iZ-hYX3U9dn=Rjnk9PZv+J>0f zxWCD*3^B~!{>*YaG5Jv|%_Tqm#!fcbXA|CiTR>8q{rSxyhKUQVTT#ZHZ9mf11L2p< z(B|9y(@OosU@Uf}b)(t9^FB8`LVUP)t6|!qc3#z0;>gh*IvNDko+R2bZVXS98 z{+41bewttaQ^`p#%keV=mt~w14*O~brs(9d*E0_PN`I$ZFr6%~Dni2^%DN5L&M0c4 zZY~Pz>+#lddAY)4wI@!}557Cr?04 zyqsu1z|gZKYR)LfsdtK$`^DiCUCYFR9fn8_*RXDKXA&9SO6)JN8F4d>L!gYnMhtf1 zfI8p}GjFhB5v@vF963^x+D%MjQin^dJQW}fiA7dT+JC*4%om)Cc;G!C=r%~3`ORrv z1|i>SzlC58!6;2)!EAdgKOb1>>dT~ac+3oKYZA>;-&|3F?<5;`@u?K1h3&j)Tql{C zI6ug>v*#<33q7)T6;VlBefBGvTLLVr7~LV`*(If4qQtM z4hmV>B%_U2}`PK zW*}VOsI0M4y}6u0O{^`F+?_eAA7yX^22CBRlEFH$yZJSV&Q(>^r27PGDPNQC#t#@V zhn~uRn(wK#OPgn^r(4Za$Yap4O8$E*=az&(W1CK_>}TOG1A?O4C_81MS(9mC*Hvg| z@YW4*xoQe|G;GWcZ2$O2t%1hjEOPM-epMfO8FBXQ6@%PQKzIYn&qg!v)u*4yiY|Vc zZK1zU-G93}$|&CAgsqla7UyHi(tOS>5ThIpsEjnsKA8(54OhLX8=o%Nd2QaVv*)&* zR|n@(iGGPXrO}T8F{|CBJ9n%HQ;T;E>H?lml0M`=x6o{=lQ}*hkY4M-47Gd~tqd#j_;!^L%QsPZa%Zvb9dZ z$Yb?h^3bvG2nMz~1$1c7w?e{h9X&-+qZ?x&Q!4{(OWD)j3Ly`XY&MXGQd*A2Dnui! zj2zAFIt9$D{DC;=jTq0vdcr#xLE97r&b>?}Q-jqmql#d|QNQr=#B3YL%+_@3w77Uq z;qT<=&|oH#j4t{;odi_u2u-`=f8sLz-|aZ#|8k%Rwe0D#%bxe=9vT*IrN!iNB`$!Of^qcl3R-RbC{Y_5vH58E!$lHUXd6uUIn6W-zF_DWvcz zqpo%|d^m-kdkVV^i?fo3)`#SWS_>#P-jHcweqxS8c~b3kuw44U^9VCbhTdU*b1^=C za~yC~>)o~}L;-kL4t!C!V;QbMF zkd87tznQb|35i@B{s}kCyQs6gGw1$z^aq_|?N_(oFPnJbOM6W#1lkPD=s=Q7qd{OZ zmUIH35#hO$ZYNPz(nZY&;Bvt1!!z2|Qu=!<@h%QGaymHqXJIoT!pvxmW^WO=GfaGE z@5y^>g{W#@^1#P)@>nC754KDfF=d4yU$}0y5A@v1{XFw&e&IVg7T~Ga7GtA89 zcsrsKdg+o`9m;HHtth;(S%bPMf4XKy3`^Vd1sM0~zCq|m9@;-rrREG)IJ02dcyQrUS$l#zFR{`&Rc~yW_RKPB-U;#}FiW*j`|4?+TV?cRa%@lS43O95A@6$|rQ8lHezlX5|YG(ocHZx8rOOV2Ky zf}0=K8s@A*Ucy3Bs5q*f0*9RJ?)NBzb~AxZw9NTR_9xNySB&VLqA}~ON_eQ+{GocL zhUtg`p+)xKQx}8C={9MvYm)_iF{DJjZG;k((|a5I#x6ehN$qp=MT zJC^p7HN#?_s5V7P7KaOma~LEl+Vb2Wxz&K+|NPBPe^k&BvXKRCec>%RHo6MJTMjW} z`cRQkm&VrHx4mN+oc<}8SED!7q@NJ$Tz&k3yuZ+raz$aR*q~}DeOD4S!lBVNcZ$g z#UPuQW3ec700WEWdV@Tz9U{$a47xU+-VE5r4~C9ufDgRdc={pl^t+trdibXuvZ0-b z*C?~!w(E@U(#bk_%Tc=>wEV2!Mf|Rl~HzLyXquRh;@kQVhL0wnwLcG^Y=PV?#?a$QX@(G7I<9 z@E}9HyUXg+4IYmB0YBX0gzl#YD$)RJkT;#HBn1tGhA>|$t;Y#3%Uo+#F{m-uZ+=@a z`5JoLin$gQ`W*Kj1qR4`s5c(_)8xs&vXkq{YmKC7IYkqPo1v?}?ZK%_^4D~!4hY|| zpz0$GLebYx@^aW#SaFG&mf9O<09Ocv4(SYtB#U+9%ql-Xiw4Ex6M5%I7)FEPqS5B@ldSbE#>q%jP z@MeB8KZ>%cht3peLP96cD(z$9Yv?*J=%|i zFZtF%&AWHk>vRe(xM6tkkBc~n*$CBs58tY#eb-4A7d%`TlrD?nqcMir z7VSxOce4%z8Z1qlkF?g4Ly%G?^7I>%lB(G!Zb5G!icNFvU91yl`t}|@3?Rl!(MZ_kT_E$9`mfa@x%4Dwpe8&*yPQG9GtUG**j>2emdOwF2 z+?&~sm@87RGK*foED}_8pf=Az;#T~^sjaC^Lj76{rp@nIY-_2t;cn^1;%PbY=B72@ zMi07xK_;Ko*2iJdt;xYtWKgf=$`@?CIvyKO;wHA`~&y3!#d z&JTb?uGA{TEbcM5DU71#J~TY2*9mpu76!F?HQy>kG~${p#QT;JVU$@#h0FaKq2be3 zsBYN6W%_tV&ds45TYgdVp1zHd&3@sVCyR_m0DuIs3TVL<=~i)Ob#`k4H%CTAbSi?Y zZSu=UE_9NI`UYPNuCk6>FOPVd)lK8p=WDu@4_q%h3;z)`r}m?q|CmJjFY^O@@fSQ| zLhBM6pUhivezzv|gS3e%n6`m`IdiJObSvg(|20pS?DVJD?@YHkHHm``5p$2u?$a|| zPj85x&bl)J(^ixr*M4nyo~2x{ZL=Z>fQ`^nL(g>BwaMS?kp7n+4%XOteZTf^SLi>d z(o?8^(*V1Y3)&G^fB6po56$-Xe&N-YU=Gk{pKYJi@H9E`pRa%Q>%V}4|DTOkHo}(K zcuT_~@!A8Q?!iXh$wci-RWOZ#n6$W9AA4ciu z>hs(O1+733w5@-;5bqKbX|6&&MEuRC^n$(#;BNy!MW+7a_L`R*k}x3rAu87n%yi64 ze)J22dc{@q2c5Mm`)wmGecTAyl-xGiCrUiD8SGVa`uoPeH4#D~t6BfG*-J-6WEx?yd9?DJ>t(#GdM(N~SLeFvTK%=F8LW5dLy}*+k>EGUn7b)+I72LE* zP>i!n`di|G5i_232O1OQ_|VhxU%JfvY{oBoH7ZZUxY4^pH{l4FO~JX}QAFkGY>)1K zi3!5s2DSa+)mWAMPAk?nXb>&Ee}qt!1wI3`k<9FW5T<}(z)MCg(S$vcCc=!hNm3B= zDHUrgNbda-6CJ2NaluN@Iy?k%^Pv5Qj%#d)?L_*ZRe^--Tipt=tmqtN;aRwF+WX`~ zfqJITt<<^SQ-@%6IR$Bot0^`^34BRH>WzFF=;+jV>!0sfR|G~qI_ZY#XdKS?u(n!d zS=*x_ZO{F*yf_N%irUw7-_SLkPY{;VKtEw?}hRn++V^xCaX zdohlE7nW8$fiG|{Q5AMgUk4L$O+U9o30+5@?6v;F2xoNUK^%1A)dXSr$n|45L?(ka z=}v$DCja%~CZyAk?qNq-gQNNy!uE4x>&dFSdSkM(9k*ZhJxzYNRZ2Ull^1thfyqz% zsx%%xzkmLh!WF;s-zzxVf0$F#$8`(l(+ZuFFT)dV&=jvu`e_(MSiV2)BZNG@z2=e5 z0D^k8l-V#x?$y?~h|uqe>3WnQKMjAbr*T+H^Pte8ix)R8F!axOuH+m!+wD{Dd-kFf z`x!=d-SN{AFaH_J|NUTaqwxk*8VjqVQVIE<&dW>{_yDV=d0$OUiani00=0Z_tFnh3 z(_xVGV&Mq7VrhyLgt2;P96hr*e(es$QyLr>nnR2zQnz@zh_DViJ+6JXi*Cohr{&o? zC#qk$Zf&XeK5ER5NS*=$(s`L(57V4MuI=^rmesSqnvpd6ohXaLIY{k+vvaNP8rh0z^>z~+rjw3%o#JudrrWnArlV3^Ue`JM#h3ZWUx*l=EGV*Kz~+EaCGEKKrT zHTVK(-?aXgO0_>4_xc(pYq|Buz+0I2-a9+vcVcwt=C-c12yVb#?=L5nRthKu zGNqO`pO&|@Vu#(4t)3WO*@*er`Gc0Ci3|zFy)`Sam5C7^lh%S~Z+J)j^+tzoM|}KQ z3TdP$Lk=0iE$H7^PGC$Qid7ZFog?zmX#L$uyVHFlL&&L#=M;A2ysY?ft7=u4g{iuE z-Y2R9u7B(CAI`fw7gAYb=d}ahdrk?z_(*I1HklU;ocyyE14-*XY2HOU@F7Qe&qWu1 zjR&2$2~>EYUDW1y!|X0<@g}mLo!`ioy@-!{UfH1&>F=XcF_<5s`|K>j^>LN==sym! zepm6=J~vGIkhV$Vuuq`6L|!92DeE3sDbBq{i)kSHs61Vc%Q5~(vyIw? z{j@hr%7VTAf8RKuefaDDTpp`m|250(B~(3cyqew2>D;PZvCgoY6FARKFmVPwmgb-n zmse(dS7RfsX427(WO;LOc{=V8akV991f!g~&*>XT+KPFIS6s537B7k%w_=c1rBSO3 z#1e_>n zTyFP}Y2FU~*!?Iss6|Ko(Znd8_4SN=W$oVBEom{ZYD5*0fSY(d`&w1&=X&#AAxBg@ z^o4C)dcXdo6~&Xa!i{v;tyqcb@CkJR??tR@5cZMXRFB-R$acUZc@aC&4dR+Tz9BDO zqbf&r3E8o-iyb4!j^>CFD<%)&qo}P9EqSqu$=W~0Lw={Z?}W@}t%Op=FDqXrO4P_O zvSHy!hk~?nODhFAW~V(TPP~{1t9H1{osr2?FeCFJE8SQj{v|(Pr-C$GDS+Os#@0>R zCx&g6a?7fD@B2r|L5#=~&&AD*4U)5>j?fE`bN)FMvylUol`Vq!n(7_tyBa8N$C-jP z-;tCD2e2Zmv0bPlIR0GybA3XzI4E3pAgTPrXhC}5EX}86jNq74omAu$CKd|&OADDU zYpvi(wF_lt$!N_C=q+TnVp#l}F7suI)mWG@2N||EtlrHZMY6$0)(KS70;-i5j!D4cy85F=N7GmvK$= z+IX}%Jq{Zi_0h_h-Du|lKTM2^n-!+&0=H@bz3Q1?w0Ik%Zz9>NvnNjfhrLC3uJ{=| zU?=maZQLf{uiyN?+I#P~CbP9&n7!SKGlM|z14 z0t!+bqzi}&s6a3vAT`oLq(y2dArTUY5FjK0LI@<^!kO7K6FKjvXWs9;?|065{_vMP zKgnwMy4Q7I_qEolkg{&P?Mx22Lg3}p&fRtu^H%UZ%zPCWZOAZN4UGX0mevB;v*`{n z@y)~?6&B1Pq@=QDqn-0FF{U6eZjjdrn*^L%3}DKX^Iuv!#Yz?4h5W1CULZhXgyB-) z1TnWpK!kE0jN65gs18#v^i<;pH7&h$ozb@@ZuPBWR?rWRtvCb>Lov4v~9PB7+6|EtVDj&zdz98d38Bt*aEO!+GRyPkEiG3FC+JN zEd-u^IoS#+ifpV5oN;4Trql8)&LA^Gyc9#>q5llZ8OJ)>_ttn#&oCBPdX-X0x+7Kk z#@!lZ_bccxFDJbl=KCv^{L_-=`_n=|U|oZ>p8*Mhsj=(8w@o%1oiec-F0>tfK8W4Y zozFqF)pmBTbZTFi8(aNv+5-^HnZVP4ed`;VkJp(Ja#wfzNq;KFwHjJ{p#z&fBLu6I zk(+n6p1RcwT$ek}{%IvB1Qbr9fsEi0QHX@#8To=$Kh||P$i5j+nHPaQih0`t(o((j zmD;OEf@&?J|0)H``=_#M`$1B6>eUpeVK2{-lytPstavO0sh@f;1nY9hezBCX;?6$5e^F7cnQ1q5wEbTpBxK}o>!Ss9veDAY38hUOX zhzlYg(VnExKCSwGdV#*OLITq*pb<$Xt^M$;nXLg$)N4XbOX8x&w-6uJ_^L7yLtfg_bYu! z7hKH)psnPhLu@N77p9vYIWoijJ0j+tcd&t+LGB?|L~6xRSqFE%m(1zNkqV!K0gWhv zp|OG0E}9JKIE66AGb=r>C<(4yJxw&fvacn=4uU#JL{dB-@6qXfMPsih6;s$&CWQ2myY`0l|9D;Z;HYJsq`YB!pFI`* z;YB%VmJ7m$D3u3gIQ=ft+*BKSQ*sH67Ydcl+SdK%6aJcPc41e({ZI;=L!gUppPiBC zv}@7te{-oR4bxARHj+&mi}oJ#DWFlPr&g$0lYRPKTY~KKe6-1-NeJMEEu+uXSjWXo zE;QvzGmg#F0^I|l-xH^QsmSi_?EN-B8?^l@q@1JIB>r*to23_9kVVc z6Sz(LX*ZzF8rE{@363cmR===1hk$DY^#rF~-PA;60p0C`@`wRka#2jC>pmxe80~Bf zKWO`kZO*J`d$7w3AbR0Fg9}XXGl`Ygy)Wm*(On>bKpxC+2(Wqj^``KDQ9oT>F-j6f_y%J zXLDVpSrKzGtQOfvhC|XJf$Z*hE_b-Rn1)*%@TIf5VYEAQQzq51-a_&Zm+iEg3rm`7 z8ToN-auH;|5+V(5GN0aAf=eBuMJTry*4SnqQ_RmW)eF?lUx&hkg5xnET|o8YJtbAM ztxL@@D~@v79BMME6zRo@6pmxJj#I8r+7L4BGTn03qSo18W`YI3V-1?d}}HPCMITr1IIU z-Po$RKrQrAsEz3m#z|1Tk5^fl74e*R%7hTzjF0nSG8RBs9aJk95tEVV-^P%==$nyT zG=?*tUk`)2>{{Tlz^6`69srL4rnMmZMvZ#&lJEIpo67eb-n*h$; zIAt(kHrGd`?Kq`vqq+G$MZJ7`oM+&%jt6ef#J2l?boRwAh<7y8TpZXP2w7w8u$SXF zdx(Tog@uHUR5`A3Q=ok{@N3RStBQ%;LTPC5C2IXSeV%fo^2-UUf~m;XTJ5;?l1b_p ztfkD3ZOA$;)n7xW*nzaj3oiu|ztnc%S`y9Pe*k|sr6$#_exd!7ChKHMv5FS&d_9_$_eB1(f z({Boz$AKFK&e>$t!@i>lK=&JG#_a&bQF@6d2)In(Er;%{Q=$5K2S};QBXw>?W`6tu z`k9y1NB_-z;d_dhg|jSFAUE|SDs;Spwj(RVl||HFQd0yRaU$;nl`h6}&0RbhzL=5f z-b7ubuSUWs1A1j1v77$ZcH;i0OpbT?U;|11SdtlKV~c> z_!uFMYRZp>M&CFE@qF9tO#xaLbpSg+HAuSjRav{FR`wXM_7agExMbUJCX6h{Qm(oy^S+1S28a;c?MR1`ZPYq+ zYD&?3g$rJ%-hYwnt91&}>|!g&i*DWN9R_YgP+RXErfI2f)qJKvt;hjO>oq{aD^(!P z#WxhFs0e3oQYWq!$84-uXt@4Tz1q_ zB@24Rao@5lNe@hX+t?xmQJ&(y&Vkv~8{84F@EF}s*XVGt#{v;-33uZ9@=8+_<&@M? zo+m&Bzo9Yo&$)`5AHKBvA>{tL-ZpS#uQzgJ{Hi&`MH}RSeS@}mJ|-;OP5>L50G3+~ zR=p%_wq~tt^L&f|2O$H!*y;(d}z}+P;Ud;tIn022ucS7J@{kx_r)XNvRrlCG&2BK)4AJrJDZ+3EK zDqKSSRj@sFsuBHiv{Sm1gcOhv4c>J4j08et^All0#lv}b+{uG?U8;|^NN;}oAdyx7 z6Ho*>c;57YzkaB#i@2<%yOb^RTUNr)1tce84sXs%nvWkxqS~gtsx`|WHMRTN5xt(= zkXW**;7tND23lLCoPn*#CC#D%AJ?K@JrH<$lA3n93_64@?e7AKj2Cw2p8XaA`)gnO zm!E<|$dwjSWCB({!*(i}dhuYQ>-b|8YY;h4#gsxB4n}XFmPlQso4X5#V`p@VDlP0l zitpa3lotG`-@m}fyZY$9Ank}tC2GF-5F`k~kpLPWmG?%b1(;2?`ah54)HCPfSN+Zs zaA!SJLg|f}ucXoc>V9D^aiA3V@k?^5FcG5)fD&7+3M9(os-T+Mo{#YdJhL4+^^;3^ z!O%w*{g8ftDE`4JHctcrxB7*&q#7h3D0{FKWg!tvb zBChuMNY3JX-v0P-6D{xWCB~ZOsI}t{x31X1)s{VOEM(jk)F@`yoVF$Engml8EzT+e zCJy@as)^x$mYx+W;?FtNbPSQ(5AE_QaH57WtQ;y_q^RK7k%^j8Gr#06yVG#Lym5_} z!3#GQXU73LJlRc6xs#@4GVZ;wGN~9&QOu6Gfa+XA&Q;pL zGeG`M>u058%F@{V^YDj(#{OG$-gxfMH?>3xV-Yo%Bt}NdN#0bv-a-B zVyCTHBgqVL*e4aFbGjm3>YC(xx3gGlSQ>SBG@$~9lvDK`4IcfmbKK6l*8ivtrPoDn z{=JQ7VaSeFUP8^0=#tj3B73fjs=~4DR1AG8G-EKzLHkhwuM*NshbIrmb(cu(JS9&h z{D2w!;H`}T#Q#`R#Z*{@8H(EKwH#>tMzXma5TEl?OW};nqRe~D@=8y1Mn-|8lXWxw zX&7l+119c4^UlG5^Jt}dKn2<=@(QN>y6fx8!Rt|%VXDP%f>(|M{U>IH84xi1CeVM{__H_& ziG}7zF|A06q)P)GoU5}b0V#AZHE*Q;6MsUps%ncewIj!jr)UWKNuiPQ&Zfzt0qm&` zSw73ou(|)B83^dNq6NT}Gm)58!9)|nrj>NO;XaJfKb+Y7M1X=tQwKHE;d@atW+H}p znP^PzGvU}O=uoth|0ESSp---hMhV3HORm~Nf_d4wT%@|h82v9dN6&ECy;A`nZFY;g zYHW7b*kHIfrXl^;$kk?U-dqA91w+0t+kPWR`}-Jml#p|uK8Q>K_=>+uw&!@=?~CmB zlMq_5J^`_+oQ+{Ltn0g}{k?6w6V=$?m zu=<+*$fNRUh;$W@J3|v8mS9^#_YqMlHSjdx_S_c2aRrgjmVjfKGIS|ZbkSJ2GyfwA z>`e&L_I+mNLV%wmfuF=x^aIqqN-TR?LZdNW8 zLUCgcT%lJgLP3aHqB-W1mGVxP4fZ1WDdnGXcaNOw8V9AmYnjOgCy59v)IeKjFk4Jj zJ^#?)l1eizF|`+ZhW&?4WjusWnT%@JfIUK0%8JkMg`=70-qx5I_Cd<))*UV}dj$NE zt?BQo+gx|~#-Pw^`N5kz3Tq%;MGhgY%V(=&W&P{})dxzQRt1wt_@P1URn_f76E41S zitcblLRR8p^$SFmQiyl?V#^{Uuw?$mX>4K5?jqTs4T;z+)oa+g(gIx2zeTWJ$r zRQd*xUhx@4x6WgkoFUIm9zIHC?<{@B;GZ(>umLlM+Z24ry3 zhh{#1=QzXlE%0k*8Hy5LNJUaeFF*^y5wX2ZZ$gjQu~F)#nb$&;by(+jVr%Mr)TYlr zVcr`Hag*sQ>2580hHrBB<87++KA5jIkn*HV7#eSy@O^}$c)vf|qjl56 zHq=>`8xoowyxA>y3$<>^clkV5E<+a#oL`wj+|J@qZ#QKfqKMt5P_{+&3~lD&iksAZ z5SJMHm`Z$n&^h?w9~gAWDsfhCRp1h~6M0|j6Qu^kbYNk>@!WIKzDrP5#RzQxwER9w zBKcrbQIuJ{`up!l?VrMxI~8UiHU&;iGE@Ei2QhAY!kGW#YJI`0v!BA%%CzX6bjG4Y zb%5eH?1*P(*p^nWg$n87cx^$`q9$EM>y&ysu^)60hC$lxAKw5h)+zSkRasq=|1eQv zROZB{{jg?8;kAOe(LguCzgV2K=^Hn~Qgf-u5V1dJ8qfeiO$HDEeQ#XboCp}i815r=M2XykIY1)&p`4;x}wCm@^pNvTZ83DkXZSRMq1ETUFz@}BuE)VUp=#UYgU$YgZROzOzt@K_}m12S5>MCH^ zXTK^I*uSl)@OhPyl4yRaLHR4_P^9|%!)&*v6acx#>i~+oy)uw+lo06RDskW(*k_^R zKDmG%6xFOo0tgnfw3?k+CGgxNt{-)6`{5r;Bj2z-J7(hR@&$F70oq;@QcB7bq=kXl>`^4n~tqrIi+h!a$s5;hO*)U|xPl~;q;2#U;2CV$# zHBic%Ht@lSVuF;eF~(ozSn(Q&x*2llS2m=L1W-F5>r|+a_+gD zuPlmV?6%8CrL3rWCa-0Q7(P`|zMa}TG3L)3@4z|Tn9!Sos}?K$@JaYDE3P!5s}QW+!oK11?xmh*fyT1sD(?vDt>Js>pnIxM@XXyPvo5Al>7_2 zBX!DJ76C!kSF@_=f4R`9Inl z=Go;Mpdm|9O=~YzEoKzDigX`QcoE~UX{!*n1x~uQ%#5^mM9PxN>KK{HVN;=P;T+NE zLKmUPXTnhPW0GBY9ZuBi`h`EBX^+l~Ek1`scN{y^mz%Cyrxn^YM7bh0_`x59ZavH( z5b&M5qOB?wmUnP>B<_zyCkWu?fhR%Sd$d>(YVG(qVW($Ad#-1MoDRdcIyQYLyL}ax@ zmRhnbuG&r~BDxd)Q$rx@eLGXQS>POQDRA@^aB5coTQR@i7V&VX{&dS}Mq{2Cb1|H`V;r}TS`P+Wac|WM{ET^UO$ECS1ldDAC0AoyD?ykzVI?Oek_WN_k>cz6 zreY*lv)Q0*yIe;dvqV}waAD5By0DNH-s{zs<>7q)NU^wzWJAmmQz%Gt`-2?A)=4-R z(^Zy@8G>v&h_;CncU{(WlQL7Hv{5G?qN8rPX=hjS`?Rmg5uEyT%BXi}_Q!vmya^U? zKksy~C8@9-c%UZ*w@rd2Hha-OCdOwDgPo3sZ3lcF3yVbA<5z(bE$iM&cg6bkBCl6v z0wXD4RbS<_?9WK1+?U(+{pNq&T;EBeT&SS=pMugr(Nfs7pNf2Y$1HCBX7q;u zvm>JG_U8^*wP|fixf8sq(g7!OgwEc9{AVBY`2UMr<5_b5 z{{KMmyQ-yqx`g5piFa(dG~SSuR8+B60nYk__pbI>>q12+_z-V_-SqR+mR}rhAHBO% zu6i2!c8^!%o{M2}@q*g+n8%{6S3cg8(bsxKPe@SH=XEI6)^d$h@mMF8cHa4nmm0>+ zl)#IB8i)8tG2l|+zdpCfF2SE^g}*m-#jN@t8+-eZ>}kQlxX55_TuF$uwYY|aSAK=S z7;?i^^B7jhRyWji|J$kd0l0MI2x6DWmR)bf?~M6SZ(8XGbzljPGGvOv@k2=T_B-oe zZTQ`x?K+j{`I)lwQVIQ=zgA2@VD0L@6b`7^ug4ZN<%u(Dj`fsz!h$fuJ`SoQ?CW>K z*7tLNnrXO5E2GfuptQ&JTJL;V zjI7v5yuT9HhBmydm8c=flkq5{#UX>6(-@IA3ltmIO|$fMj^0!!_c3S!vUgNAwjNT( zWXkZqor;B zMo6(Awk^$SKT>T4ZxAR=+%nWWwXJbXxHO>Y-@!jo@6apJ(&-8sK zmrsWW#iK&H5nHGRs)zeL-Q_Y}OE-)p7X0wrsNTvka&Ys;YM5jj06`x|>(E58Q3H?dT^v;K|sM8^-6Q zadJN>n+=36dLDUAtMM~6Zrq;V6N+t=@PBcM^25F&K_-y8+*V9om)I=f|8BWRYn-QO zat7s|5zCY5H+r*$5rZbgmrF+D{8(Av1o(O8R&9#7>CCK+$0l|XOkuJ`*8d*tM;PMA z>l}J~k(1C=oV^;p_ZRsG^zZ%1j5 zB;dT712y~F0?+mN6Ga_{z4vE`lC(67bEXa@oybAdxuCGB=zt#UyWUlYBLgmSCB)h! z4+gok*s%IOFb=J>35k;YRTr)iTEhdX{hF8b!1+D2ch!xdR;yDLmU{*^n=@t}Mu$9} zLh*EEX{kk<600{j!N>OslKO)QSy`RZ=0e?R3pNKlFCNYEgD<$BUr2?D z-?LAkv8G&8EHw|^6n5;>8==f^!Qp8fkvm#lnE{GeQcaZ@areGNmt>Viq6u2u>JCwc z$(FCi9|{m2=k6kku-{);hH?xRI9GB5kZ+I0OD5MpLg(Urbh~*WM~DM5XSA4B!X>}^QfT=a5NWCFC@DsEc7t@eLX#2n?g~C>cjS%aBhxeOrB!O=)*$Si>MAiRgvOx+Yo2cm z+9X=Cev}uYAhmpy{4~TB86yc}urL}~0plFSM%7JCp*!3{ciVLnf_2?|9{M|`A~gdG zq{#-UK??7bZKVt9Y^`*6QM`PiyBt%ZNg=k4us}OqjUY#SrKZ0_*n~fI6Dbns9}g^jhEGUD$HmF$dgAZs!dCxJQWrk`#fh-7lOeI*ybIe zWEQ5FV-`jVp$~_?KIo0jT($~PHVZ5Aa&wnRe{dEhq>F9pXIbWvRDu-HY*dx3CLwjc z8wHC9lIV~W@?z?aV=46Z_z>QXVysp-?Gi1sUV@;zvucAf?CN0lil^MdYmqzn)Kt?3 z?|>r59=}G`M~~dy0~Nt#N*%Y4t>l`22b-mRZx&X5z8O_BK+nWgaeb}`b2AnR!zJt= zFvBZh6|xc0C2+yas@mx6~{Wn?Fm{Jab&b8y))^JJf>jV!(G~Mg+Sv{G{P!Fj7J9 zIjxUaNzVAfkTmVOjg(hAd}RlNRNrt`cu3jxdFn`qqMmrwiVwzC+h3-y^MWXYd~M3_ z>a_^V*QL!GY08wWxCnLiEkm z9uq@%V-R5pK!c53vH-uhP@jMVe!WNDz*)Ta}>PdT_4ltDZ{Kzz9)iq7r zo!3ker0}UzwOOUh_m521cJ>|#V#`@IAEOP8jh$Fj2Ba$+Ve1CW9lW zr(-%=6G*)oY~ute8k^}HQi=?Cg)gY%A?0AR%e`CN9R}k$8v@Rmhn4h85gWX3c*BC0 z9S_Vks;Fn0E6%3|KZ8N1<&=1>JdRN)(V!;iTW^0J`7%bl4UxRM=4ws4L}Ts0XW7Ki z8Fhr-|BR4*c=5O3vjL@!wp|hjx=O_Gj?v#ab?@11W9K3 z%Q67KSX-Be8qM?%-ptMVGs17-cydNc;%#?0(r|-uI&G4& zeM#5#rkA$BasFy#+J4(chL87zDERHm2usm83MZ6darcx)-<{=v?0sbIJiqYZr{LI? zqJx=PCOnP%{zG}vGjbhcPt;ASf;O~PQOs;--rrtWypKpWwaTb7iV|sjVrB* zBdsJzNn3bNZddRo0uoD0cAj?fRq%~I>d&*s;X&b}e$JZP&5 z^`7wTPi1pDhmhMSnJVh08PoD(wy*ca4tp2|Boj3sjg{?LAYG_PR!oR85BqJz zEm@Vh~|{u4i)W<@adyZdV$`{>TomAkxHb%y!`U!5dcwLf|h z)pbSP^W}oq8>rDxZm~swbqe-T6V)eS`hW70cL13nyD73p@*t4IN>0Sl zCf7}S3TMhr39&C>m(wh^7Sx$KPe-jlXIhdZ+N=Yey&pvjeoLpFaKGn%_xpmno%=Y$ zZz#*PR!jv40P=^x5HP2-B7Yz@Lrn=v)$HGNMiP1(5q59un6-FEY>i}z^Q;!Qjq84#xIpSR? zwv32P@;?Wr{BQH}@srB|_&+Avub+-PuQe=d1s+zV(%6?m?D7~xeXirpJ!Ct5>$0D( z*v+}k^pntW`fl%bJ-6OITIpjOxjft-;U9u@jL<{@96HhvkLz<6IcD16K55U^B#zA- zF4HNiHcLM^8+^1Zh`bVyD{b#_1J(JEv#9%X%sF=UvB7RpFDJuOnE6xGDV zX6Xu{TkPyd{4wx~01$V`3!%o&^e&?M+6cwS#p+mS>wO+~o%_s(Ys>cbjtZL<;pvQm zy2L_xTqSybpLj5{bqniJT%KQMun{`VMwgWm#J{EO^wiflk)8 z!s5x#=s5349oTbO&x_|yH;tP$lY7rXW**Ko560Q)T12T7$#F^s=aI{OSzad)o8}^e zHBCoX;?ssK^c4C!2%i>MF!Pc$`$A^B1lgKS>gDHFPQi?;nmgkET$@2+2*0y)G5llGW>LT;uK6Gedeqr?v#n1t^ojldmaw> zx?F*lHX`2~?b+(JGO89-S5W6*a^IW$p1W*DyAcmLXNyS-uEhmrOAacw)yc zbi!tTI-RUc<344Y|I8s-Nz9lj7bVHd!)6m%RvYFe1?$gg#!a`XJn8YnbR^J&ouqlL zB}a@uinp~*6QWt(C&m{tSeGbG{j`o6PpGSA3Tpf$c8a)hUNY5>lhwMcqtG_1Rq436 z-^MYqW&?@#z$o3GXwY7jI@MO4ALNblG!cM#oVYOz;UG)2Q5(_$K``3UCXPQA56_h~ z`UCqPI+NJ^87ubXFsw!eJR#VF`XUdhky0`ZJ83mlFZZBdUE*kO_x_M`CPOf>8rsIQ z^%tzYw)ryD`@=paijl%YJtu>^KmYVZfA}%+;&1NckJn!wgMVpc`^8vtO#tzw9_@>n zpS6PT|7KNW_4V}h%xULs(!PL@3VpQ6w3;>ZGD@uB%(U7c1NG^X+>`CbCqE+-zI@4E zYi;=7sVD#I1{es484ywAjid1AH+V*Qn343~ca6@27co4ihyTQJx zFoPHvYJC)8r$0C{q%J4~733Rb0UJwWs3iZ(__VJeI}QAG#5+Vb&*X|=< z70i@gYJIjp_p3MztQ)`_>Zrg^6sLhFPE7wBBdQDL-v^uLkjz4CS7ls zJCUx3@2u7#r*)~c{UA|AqczH=4S8v=-_@ITVPGb65z+5oxsU9cPKyk_@zDdJR0#bo zcK>(J8$4@y`?umTEfTvVp7(V2C^;wrCB!bVhBy_vjs5_i=~pW!ZVoubT#AQrsd@2I zqEJWY{>&Tt?VJ2Uw|4bU7wK~+>ok$E5tX|q4`8E_G(C1uOe*rF^{o7@_1CAxH;EFj zFYf`BM`4T!!|?s&;ie-r+o_F6zvraH6MUWjT+TR?-40}#FzxI0p{k9= z7D_H2B)=Q?uiYP1S7`<=F}1q4yYWbqFjA^qN=Jx&LV5wF;CEohe!V4bM|ZrMn`^3( z{M$21@v!F3=rC#8OfiD5hGr7R=&k?m_TN5yxo7>7VCb-@BDz*6XQpsy2P3x9!CCC^ zQ_DQd`VnmkD;$jf*_mP!eZHi@+ifq7yyCCb|1#VkkSqS=9{vF^TjanSm4#tyskfuNzbFg#3W3i(oHZz0cH^#2z5&z_nTFN zd};Z%tCH>TJk)SR57VG6KOuFT9<~MIbiivRIQRi!GHTkz`j-ekdw7L^sm1r|YY5vl z!HxSl@DROQ-me>58fkv#(G)~Oyu7Pa04RKHf=BOISk}1nvB8_tOSisYH2z|Al7HS^Gg#K_Nb+h1PH{}`|GHz@k! zkBOapo?AfR?|JF}Is~vLj(RD4?05hn$S-j#-}R`s*1tS*>wkV?uUXjti3lAeM%Kyo zT$x!iN(W9d){s+kZnQ;HHAt!0I@>0=a3ujSQrfm$45;fJ|yUpud z*>Sfit_m4RY@|jDxhfZ2YbtyHhFESb#3q=z1i?B#QS^VZ-M>p3uNCuw^|T~itOnAt zn(p<|AHIa2KXKY#Br6<`?*kY9__(I*6P_S}mz&cts#eXa&?wb;-$eC0sE zr;O(Gr`4zxpU-#I<=>ont5jOrMz;H2T4c3zZ%uqrFz3~eArP-qIs>Ij zxsMs~xLy&oDn7vCiEy{5>$jetfYy;FSg4T{V^9;`ZhY*Ga}Y+p$*i?8%)h

$U= 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png b/zmk/docs/docs/assets/troubleshooting/keymaps/unhealthyEDIT.png new file mode 100644 index 0000000000000000000000000000000000000000..3fd8dc70fb1f79085f8ce70ac6627f151aa6b92c GIT binary patch literal 187729 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 QAGq+#m7jBUZ~pqf0FSe~%K!iX literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/usb-logging/com.jpg b/zmk/docs/docs/assets/usb-logging/com.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e2ab9a8372ba75f2c8db3201f52bfe39fcfaa04e GIT binary patch literal 10993 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 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/usb-logging/putty.jpg b/zmk/docs/docs/assets/usb-logging/putty.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dfbb4bd73d7c3fe80f974af4be88373d7818b75b GIT binary patch literal 160650 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 z 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 H;`RRmo)2{u literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/user-setup/github-actions-link.png b/zmk/docs/docs/assets/user-setup/github-actions-link.png new file mode 100644 index 0000000000000000000000000000000000000000..c12483b1154d3401614e6183a28b6abb79f68479 GIT binary patch literal 10573 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 +``` + +This will allow you to reference the actions defined in this header such as `BT_CLR_CMD`. + +Here is a table describing the command for each define: + +| Define | Action | +| ------------ | ---------------------------------------------------------------------------------------------- | +| `BT_CLR_CMD` | Clear bond information between the keyboard and host for the selected profile. | +| `BT_NXT_CMD` | Switch to the next profile, cycling through to the first one when the end is reached. | +| `BT_PRV_CMD` | Switch to the previous profile, cycling through to the last one when the beginning is reached. | +| `BT_SEL_CMD` | Select the 0-indexed profile by number. | + +Because at least one bluetooth commands takes an additional parameter, it is recommended to use +the following aliases in your keymap to avoid having to specify an ignored second parameter: + +| Define | Action | +| -------- | -------------------------------------------------------------------------------- | +| `BT_CLR` | Alias for `BT_CLR_CMD 0` to clear the current profile's bond to the current host | +| `BT_NXT` | Alias for `BT_NXT_CMD 0` to select the next profile | +| `BT_PRV` | Alias for `BT_PRV_CMD 0` to select the previous profile | +| `BT_SEL` | Alias for `BT_SEL_CMD` to select the given profile, e.g. `&bt BT_SEL 1` | + +## Bluetooth Behavior + +The bluetooth behavior completes an bluetooth action given on press. + +### Behavior Binding + +- Reference: `&bt` +- Parameter #1: The bluetooth command define, e.g. `BT_CLR_CMD` +- Parameter #2: (Reserved for future bluetooth command types) + +### Examples + +1. Behavior binding to clear the paired host for the selected profile: + + ``` + &bt BT_CLR + ``` + +1. Behavior binding to select the next profile: + + ``` + &bt BT_NXT + ``` + +1. Behavior binding to select the previous profile: + + ``` + &bt BT_PRV + ``` + +1. Behavior binding to select the 2nd profile (passed parameters are [zero based](https://en.wikipedia.org/wiki/Zero-based_numbering)): + + ``` + &bt BT_SEL 1 + ``` diff --git a/zmk/docs/docs/behavior/hold-tap.md b/zmk/docs/docs/behavior/hold-tap.md new file mode 100644 index 00000000..7ae5fc07 --- /dev/null +++ b/zmk/docs/docs/behavior/hold-tap.md @@ -0,0 +1,69 @@ +--- +title: Hold-tap behavior +sidebar_label: Hold-Tap +--- + +## Summary + +Hold-tap is the basis for other behaviors such as layer-tap and mod-tap. + +Simply put, the hold-tap key will output the 'hold' behavior if it's held for a while, and output the 'tap' behavior when it's tapped quickly. + +### Hold-Tap + +The `tapping_term_ms` parameter decides between a 'tap' and a 'hold'. + +![Simple behavior](../assets/hold-tap/case1_2.png) + +By default, the hold-tap is configured to also select the 'hold' functionality if another key is tapped while it's active: + +![Hold preferred behavior](../assets/hold-tap/case1_2.png) + +We call this the 'hold-preferred' flavor of hold-taps. While this flavor may work very well for a ctrl/escape key, it's not very well suited for home-row mods or layer-taps. That's why there are two more flavors to choose from: 'tap-preferred' and 'balanced'. + +![Hold-tap comparison](../assets/hold-tap/comparison.png) + +### Basic usage + +For basic usage, please see [mod-tap](./mod-tap.md) and [layer-tap](./layers.md) pages. + +### Advanced Configuration + +A code example which configures a mod-tap setting that works with homerow mods: + +``` +#include +#include + +/ { + behaviors { + hm: homerow_mods { + compatible = "zmk,behavior-hold-tap"; + label = "HOMEROW_MODS"; + #binding-cells = <2>; + tapping_term_ms = <175>; + flavor = "balanced"; + bindings = <&kp>, <&kp>; + }; + }; + + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &hm LCTRL A &hm LGUI S &hm LALT D &hm LSHFT F + >; + }; + }; +}; + +``` + +If this config does not work for you, try the flavor "tap-preferred" and a short tapping_term_ms such as 120ms. + +If you want to use a tap-hold with a keycode from a different code page, you have to define another behavior with another "bindings" parameter.For example, if you want to use SHIFT and volume up, define the bindings like `bindings = <&kp>, <&kp>;`. Only single-argument behaviors are supported at the moment. + +#### Comparison to QMK + +The hold-preferred flavor works similar to the `HOLD_ON_OTHER_KEY_PRESS` setting in QMK. The 'balanced' flavor is similar to the `PERMISSIVE_HOLD` setting, and the `tap-preferred` flavor is similar to `IGNORE_MOD_TAP_INTERRUPT`. diff --git a/zmk/docs/docs/behavior/key-press.md b/zmk/docs/docs/behavior/key-press.md new file mode 100644 index 00000000..dcf1a132 --- /dev/null +++ b/zmk/docs/docs/behavior/key-press.md @@ -0,0 +1,59 @@ +--- +title: Key Press Behaviors +sidebar_label: Key Press +--- + +## Summary + +The most basic of behaviors, is the ability to send certain keycode presses and releases in response to activating +a certain key. + +The categories of supported codes are: + +- [Keyboard & Keypad](../codes/keyboard-keypad) +- [Editing](../codes/editing) +- [Media](../codes/media) +- [Applications](../codes/applications) +- [Input Assist](../codes/input-assist) +- [Power](../codes/power) + +Please visit the [codes](../codes) section for a comprehensive list. + +For advanced users, user-defined HID codes are also supported but must be encoded, please see [`dt-bindings/zmk/keys.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/keys.h) for further insight. + +## Keycode Defines + +To make it easier to encode the HID keycode numeric values, most keymaps include +the [`dt-bindings/zmk/keys.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/keys.h) header +provided by ZMK near the top: + +``` +#include +``` + +Doing so makes a set of defines such as `A`, `N1`, etc. available for use with these behaviors + +:::note +There is an [open issue](https://github.com/zmkfirmware/zmk/issues/21) to provide a more comprehensive, and +complete set of defines for the full keypad and consumer usage pages in the future for ZMK. +::: + +### Improperly defined keymap - `dtlib.DTError: .dts.pre.tmp:` + +When compiling firmware from a keymap, it may be common to encounter an error in the form of a`dtlib.DTError: .dts.pre.tmp:`. +For instructions to resolve such an error, click [here](../troubleshooting###Improperly-defined-keymap) + +## Keypad Key Press + +The "keypad key press" behavior sends standard keypad keycodes on press/release. + +### Behavior Binding + +- Reference: `&kp` +- Parameter: The keycode usage ID from the keypad usage page, e.g. `4` or `A` + +Example: + +``` +&kp A +``` diff --git a/zmk/docs/docs/behavior/layers.md b/zmk/docs/docs/behavior/layers.md new file mode 100644 index 00000000..fcfdc93a --- /dev/null +++ b/zmk/docs/docs/behavior/layers.md @@ -0,0 +1,110 @@ +--- +title: Layer Behaviors +sidebar_label: Layers +--- + +## Summary + +Often, you may want a certain key position to alter which layers are enabled, change the default layer, etc. +Some of those behaviors are still in the works; the ones that are working now are documented here. + +## Defines To Refer To Layers + +When working with layers, you may have several different key positions with bindings that enable/disable those layers. +To make it easier to refer to those layers in your key bindings, and to change which layers are where later, you can +add a set of `#define`s at the top of your keymap file, and use those layer in your keymap. + +For example, if you have three layers, you can add the following to the top of your keymap: + +``` +#define DEFAULT 0 +#define LOWER 1 +#define RAISE 2 +``` + +This allows you to use those defines, e.g. `LOWER` later in your keymap. + +## Momentary Layer + +The "momentary layer" behavior enables a layer while a certain key is pressed. Immediately upon +activation of the key, the layer is enabled, and immediately open release of the key, the layer is disabled +again. + +### Behavior Binding + +- Reference: `&mo` +- Parameter: The layer number to enable/disable, e.g. `1` + +Example: + +``` +&mo LOWER +``` + +## Layer-tap + +The "layer-tap" behavior enables a layer when a key is held, and output another key when the key is only tapped for a short time. For more information on the inner workings of layer-tap, see [hold-tap](./hold-tap.md). + +### Behavior Binding + +- Reference: `<` +- Parameter: The layer number to enable when held, e.g. `1` +- Parameter: The keycode to send when tapped, e.g. `A` + +Example: + +``` +< LOWER SPACE +``` + +## Toggle Layer + +The "toggle layer" behavior enables a layer until the layer is manually disabled. + +### Behavior Binding + +- Reference: `&tog` +- Parameter: The layer number to enable/disable, e.g. `1` + +Example: + +``` +&tog LOWER +``` + +"Toggle layer" for a : + +``` +#define DEFAULT 0 +#define NAVI 1 + +#define NONE 0 + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { + bindings = < + &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS + &kp NUMBER_7 &kp NUMBER_8 &kp NUMBER_9 &kp KP_PLUS + &kp NUMBER_4 &kp NUMBER_5 &kp NUMBER_6 &kp KP_PLUS + &kp NUMBER_1 &kp NUMBER_2 &kp NUMBER_3 &kp RETURN + &kp NUMBER_0 &kp NUMBER_0 &kp DOT &kp RETURN + >; + }; + + nav_layer { + bindings = < + &tog NAVI &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS + &kp HOME &kp UP &kp PAGE_UP &kp KP_PLUS + &kp LEFT &none &kp RIGHT &kp KP_PLUS + &kp END &kp DOWN &kp PAGE_DOWN &kp RETURN + &kp INSERT &kp INSERT &kp DEL &kp RETURN + >; + }; + }; +}; +``` + +It is possible to use "toggle layer" to have keys that raise and lower the layers as well. diff --git a/zmk/docs/docs/behavior/lighting.md b/zmk/docs/docs/behavior/lighting.md new file mode 100644 index 00000000..2d4f532e --- /dev/null +++ b/zmk/docs/docs/behavior/lighting.md @@ -0,0 +1,51 @@ +--- +title: Lighting Behavior +sidebar_label: Lighting +--- + +## Summary + +Lighting is often used for either aesthetics or for the practical purposes of lighting up keys in the dark. +Currently ZMK supports RGB underglow, which can be changed and configured using its behavior. + +## RGB Action Defines + +RGB actions defines are provided through the [`dt-bindings/zmk/rgb.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/rgb.h) header, +which is added at the top of the keymap file: + +``` +#include +``` + +This will allow you to reference the actions defined in this header such as `RGB_TOG`. + +Here is a table describing the action for each define: + +| Define | Action | +| --------- | --------------------------------------------------------- | +| `RGB_TOG` | Toggles the RGB feature on and off | +| `RGB_HUI` | Increases the hue of the RGB feature | +| `RGB_HUD` | Decreases the hue of the RGB feature | +| `RGB_SAI` | Increases the saturation of the RGB feature | +| `RGB_SAD` | Decreases the saturation of the RGB feature | +| `RGB_BRI` | Increases the brightness of the RGB feature | +| `RGB_BRD` | Decreases the brightness of the RGB feature | +| `RGB_SPI` | Increases the speed of the RGB feature effect's animation | +| `RGB_SPD` | Decreases the speed of the RGB feature effect's animation | +| `RGB_EFF` | Cycles the RGB feature's effect forwards | +| `RGB_EFR` | Cycles the RGB feature's effect reverse | + +## RGB Underglow + +The "RGB underglow" behavior completes an RGB action given on press. + +### Behavior Binding + +- Reference: `&rgb_ug` +- Parameter: The RGB action define, e.g. `RGB_TOG` or `RGB_BRI` + +Example: + +``` +&rgb_ug RGB_TOG +``` diff --git a/zmk/docs/docs/behavior/misc.md b/zmk/docs/docs/behavior/misc.md new file mode 100644 index 00000000..446ba33c --- /dev/null +++ b/zmk/docs/docs/behavior/misc.md @@ -0,0 +1,42 @@ +--- +title: Miscellaneous Behaviors +sidebar_label: Miscellaneous +--- + +## Summary + +There are a few miscellaneous behaviors that are helpful when working with layers in keymaps, +in particular, with handling what happens in higher layers, and if events are passed to +the next layer or not + +## Transparent + +The transparent behavior simply ignores key position presses/releases, so they will be +passed down to the next active layer in the stack. + +### Behavior Binding + +- Reference: `&trans` +- Parameters: None + +Example: + +``` +&trans +``` + +## None + +The none behavior simply swallows and stops key position presses/releases, so they will **not** +be passed down to the next active layer in the stack. + +### Behavior Binding + +- Reference: `&none` +- Parameters: None + +Example: + +``` +&none +``` diff --git a/zmk/docs/docs/behavior/mod-tap.md b/zmk/docs/docs/behavior/mod-tap.md new file mode 100644 index 00000000..da8b438a --- /dev/null +++ b/zmk/docs/docs/behavior/mod-tap.md @@ -0,0 +1,42 @@ +--- +title: Mod-Tap Behavior +sidebar_label: Mod-Tap +--- + +## Summary + +The Mod-Tap sends a different keypress, if it's tapped or held. When you tap the key shortly, the first keycode is sent. If you hold the key for longer than 200ms, the second keycode is sent. + +If you press another key within the 200ms, the 'mod' behavior is also activated. + +## Mod-Tap + +The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode. + +### Behavior Binding + +- Reference: `&mt` +- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSHFT` +- Parameter #2: The keycode to sent when used as a tap, e.g. `A`, `B`. + +Example: + +``` +&mt LSHFT A +``` + +### Configuration + +You can configure a different tapping term in your keymap: + +``` +&mt { + tapping_term_ms = <400>; +}; + +/ { + keymap { + ... + } +} +``` diff --git a/zmk/docs/docs/behavior/outputs.md b/zmk/docs/docs/behavior/outputs.md new file mode 100644 index 00000000..ae812497 --- /dev/null +++ b/zmk/docs/docs/behavior/outputs.md @@ -0,0 +1,59 @@ +--- +title: Output Selection Behavior +sidebar_label: Output Selection +--- + +## Summary + +The output behavior allows selecting whether keyboard output is sent to the +USB or bluetooth connection when both are connected. This allows connecting a +keyboard to USB for power but outputting to a different device over bluetooth. + +By default, output is sent to USB when both USB and BLE are connected. +Once you select a different output, it will be remembered until you change it again. + +## Output Command Defines + +Output command defines are provided through the [`dt-bindings/zmk/outputs.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/outputs.h) +header, which is added at the top of the keymap file: + +``` +#include +``` + +This allows you to reference the actions defined in this header: + +| Define | Action | +| --------- | ----------------------------------------------- | +| `OUT_USB` | Prefer sending to USB | +| `OUT_BLE` | Prefer sending to the current bluetooth profile | +| `OUT_TOG` | Toggle between USB and BLE | + +## Output Selection Behavior + +The output selection behavior changes the preferred output on press. + +### Behavior Binding + +- Reference: `&out` +- Parameter #1: Command, e.g. `OUT_BLE` + +### Examples + +1. Behavior binding to prefer sending keyboard output to USB + + ``` + &out OUT_USB + ``` + +1. Behavior binding to prefer sending keyboard output to the current bluetooth profile + + ``` + &out OUT_BLE + ``` + +1. Behavior binding to toggle between preferring USB and BLE + + ``` + &out OUT_TOG + ``` diff --git a/zmk/docs/docs/behavior/power.md b/zmk/docs/docs/behavior/power.md new file mode 100644 index 00000000..0de50552 --- /dev/null +++ b/zmk/docs/docs/behavior/power.md @@ -0,0 +1,64 @@ +--- +title: Power Management Behaviors +sidebar_label: Power Management +--- + +## Summary + +These page contains some of the power management behaviors currently supported by ZMK. + +## External Power Control + +The External power control behavior allows enabling or disabling the VCC power output +to save power. Some of the LEDs will consume power even in OFF state. To preserve +battery life in this scenario, some controller boards have support to disable the +external power completely. + +The following boards currently support this feature: + +- nRFMicro +- nice!nano + +## External Power Control Command Defines + +External power control command defines are provided through the [`dt-bindings/zmk/ext_power.h`](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/ext_power.h) header, +which is added at the top of the keymap file: + +``` +#include +``` + +This will allow you to reference the actions defined in this header such as `EXT_POWER_OFF_CMD`. + +Here is a table describing the command for each define: + +| Define | Action | Alias | +| ---------------------- | --------------------------- | -------- | +| `EXT_POWER_OFF_CMD` | Disable the external power. | `EP_OFF` | +| `EXT_POWER_ON_CMD` | Enable the external power. | `EP_ON` | +| `EXT_POWER_TOGGLE_CMD` | Toggle the external power. | `EP_TOG` | + +### Behavior Binding + +- Reference: `&ext_power` +- Parameter#1: Command, e.g `EP_ON` + +### Example: + +1. Behavior binding to enable the external power + + ``` + &ext_power EP_ON + ``` + +1. Behavior binding to disable the external power + + ``` + &ext_power EP_OFF + ``` + +1. Behavior binding to toggle the external power + + ``` + &ext_power EP_TOG + ``` diff --git a/zmk/docs/docs/behavior/reset.md b/zmk/docs/docs/behavior/reset.md new file mode 100644 index 00000000..8cf122b4 --- /dev/null +++ b/zmk/docs/docs/behavior/reset.md @@ -0,0 +1,43 @@ +--- +title: Reset Behaviors +sidebar_label: Reset +--- + +## Summary + +There are two available behaviors that can be used to trigger a reset of the keyboard. +The first is a soft reset, that will simply reset and re-run the currently flashed +firmware; the second when triggered will reset into the bootloader, allowing you to +flash a new firmware to the keyboard. + +## Reset + +The basic reset behavior will reset the keyboard and re-run the firmware flashed +to the device + +### Behavior Binding + +- Reference: `&reset` +- Parameters: None + +Example: + +``` +&reset +``` + +## Bootloader Reset + +The bootloader reset behavior will reset the keyboard and put it into bootloader mode, allowing +you to flash a new firmware. + +### Behavior Binding + +- Reference: `&bootloader` +- Parameters: None + +Example: + +``` +&bootloader +``` diff --git a/zmk/docs/docs/codes/_applications.mdx b/zmk/docs/docs/codes/_applications.mdx new file mode 100644 index 00000000..099b701b --- /dev/null +++ b/zmk/docs/docs/codes/_applications.mdx @@ -0,0 +1,9 @@ +import Table from "@site/src/components/codes/Table"; + +## Application Controls + + + +## Applications (Launch) + +
diff --git a/zmk/docs/docs/codes/_editing.mdx b/zmk/docs/docs/codes/_editing.mdx new file mode 100644 index 00000000..2dd4d631 --- /dev/null +++ b/zmk/docs/docs/codes/_editing.mdx @@ -0,0 +1,9 @@ +import Table from "@site/src/components/codes/Table"; + +## Cut, Copy, Paste + +
+ +## Undo, Redo + +
diff --git a/zmk/docs/docs/codes/_footnotes/example.mdx b/zmk/docs/docs/codes/_footnotes/example.mdx new file mode 100644 index 00000000..2dcdb109 --- /dev/null +++ b/zmk/docs/docs/codes/_footnotes/example.mdx @@ -0,0 +1,13 @@ +This is an _example_ footnote for **code** tables. + +- Footnotes are supported per row by each operating system column. +- Footnotes support MDX syntax. +- A footnote's `id` is its filename by convention (i.e. `example`). +- Footnotes must be included and listed in `src/data/footnotes.js` because they're statically compiled. +- Footnotes are assigned within `src/data/hid.js` using `column-id: footnote-id(s)` `K`:`V` pairs (case-sensitive), where: + - `K` is the column's `id`. + - `V` is the footnote's `id`. + - `V` can also be an array of footnote ids (_optional_). +- The footnote system aims to prevent duplication of _sources_ (mdx). +- Footnotes are listed under each table, so try to avoid multiline notes unless it's necessary! +- Footnotes are automatically numbered. diff --git a/zmk/docs/docs/codes/_input-assist.mdx b/zmk/docs/docs/codes/_input-assist.mdx new file mode 100644 index 00000000..7dc432b4 --- /dev/null +++ b/zmk/docs/docs/codes/_input-assist.mdx @@ -0,0 +1,5 @@ +import Table from "@site/src/components/codes/Table"; + +## Input Assist + +
diff --git a/zmk/docs/docs/codes/_keyboard-keypad.mdx b/zmk/docs/docs/codes/_keyboard-keypad.mdx new file mode 100644 index 00000000..a00a4f4f --- /dev/null +++ b/zmk/docs/docs/codes/_keyboard-keypad.mdx @@ -0,0 +1,61 @@ +import Table from "@site/src/components/codes/Table"; + +## Keyboard + +### Letters + +
+ +### Numbers + +
+ +### Symbols / Punctuation + +
+ +### Control & Whitespace + +
+ +### Navigation + +
+ +### Modifiers + +The [Modifiers](./modifiers) page includes further information. + +
+ +### Locks + +
+ +### F Keys + +
+ +### International + +
+ +### Language + +
+ +### Miscellaneous + +
+ +## Keypad + +
+ +### Numbers + +
+ +### Symbols / Operations + +
diff --git a/zmk/docs/docs/codes/_media.mdx b/zmk/docs/docs/codes/_media.mdx new file mode 100644 index 00000000..7be80ab9 --- /dev/null +++ b/zmk/docs/docs/codes/_media.mdx @@ -0,0 +1,21 @@ +import Table from "@site/src/components/codes/Table"; + +## Sound / Volume + +
+ +## Display + +
+ +## Media Controls + +
+ +## Consumer Menus + +
+ +## Consumer Controls + +
diff --git a/zmk/docs/docs/codes/_power.mdx b/zmk/docs/docs/codes/_power.mdx new file mode 100644 index 00000000..dd06e953 --- /dev/null +++ b/zmk/docs/docs/codes/_power.mdx @@ -0,0 +1,5 @@ +import Table from "@site/src/components/codes/Table"; + +## Power & Lock + +
diff --git a/zmk/docs/docs/codes/applications.mdx b/zmk/docs/docs/codes/applications.mdx new file mode 100644 index 00000000..0c9416f3 --- /dev/null +++ b/zmk/docs/docs/codes/applications.mdx @@ -0,0 +1,15 @@ +--- +title: Applications +sidebar_label: Applications +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_applications.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/codes/editing.mdx b/zmk/docs/docs/codes/editing.mdx new file mode 100644 index 00000000..a65b8b6f --- /dev/null +++ b/zmk/docs/docs/codes/editing.mdx @@ -0,0 +1,15 @@ +--- +title: Editing +sidebar_label: Editing +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_editing.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/codes/index.mdx b/zmk/docs/docs/codes/index.mdx new file mode 100644 index 00000000..a0c9df18 --- /dev/null +++ b/zmk/docs/docs/codes/index.mdx @@ -0,0 +1,33 @@ +--- +title: Codes +sidebar_label: Full List +hide_title: true +slug: ./ +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Key, { rightToc as keyToc } from "./_keyboard-keypad.mdx"; +import Editing, { rightToc as editingToc } from "./_editing.mdx"; +import Media, { rightToc as mediaToc } from "./_media.mdx"; +import Applications, { rightToc as applicationsToc } from "./_applications.mdx"; +import InputAssist, { rightToc as inputAssistToc } from "./_input-assist.mdx"; +import Power, { rightToc as powerToc } from "./_power.mdx"; + +export const rightToc = [ + ...keyToc, + ...editingToc, + ...mediaToc, + ...applicationsToc, + ...inputAssistToc, + ...powerToc, +]; + + + + + + + + + diff --git a/zmk/docs/docs/codes/input-assist.mdx b/zmk/docs/docs/codes/input-assist.mdx new file mode 100644 index 00000000..c8bae19e --- /dev/null +++ b/zmk/docs/docs/codes/input-assist.mdx @@ -0,0 +1,15 @@ +--- +title: Input Assist +sidebar_label: Input Assist +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_input-assist.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/codes/keyboard-keypad.mdx b/zmk/docs/docs/codes/keyboard-keypad.mdx new file mode 100644 index 00000000..6a5e605d --- /dev/null +++ b/zmk/docs/docs/codes/keyboard-keypad.mdx @@ -0,0 +1,15 @@ +--- +title: Keyboard & Keypad +sidebar_label: Keyboard & Keypad +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_keyboard-keypad.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/codes/media.mdx b/zmk/docs/docs/codes/media.mdx new file mode 100644 index 00000000..588bb4cb --- /dev/null +++ b/zmk/docs/docs/codes/media.mdx @@ -0,0 +1,15 @@ +--- +title: Media +sidebar_label: Media +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_media.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/codes/modifiers.mdx b/zmk/docs/docs/codes/modifiers.mdx new file mode 100644 index 00000000..c573a670 --- /dev/null +++ b/zmk/docs/docs/codes/modifiers.mdx @@ -0,0 +1,46 @@ +--- +title: Modifiers +sidebar_label: Modifiers +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Table from "@site/src/components/codes/Table"; + + + + +## Modifiers + +Modifiers are the special keyboard keys: _shift_, _alt_, _control_ & _GUI_. + +Modifiers can be used in two forms within ZMK: + +- Modifier [Keys](#modifier-keys) → `LEFT_SHIFT` +- Modifier [Functions](#modifier-functions) → `LS(code)` + +
+ +### Modifier Keys + +These act like any other key code. + +- e.g. `&kp LEFT_GUI` pushes and releases the left GUI key. + +### Modifier Functions + +Modifier functions add one or more modifiers to a code. + +These functions take the form: `XX(code)` + +- Modifier functions apply a modifier to a code: + - `&kp LS(A)` = `LEFT_SHIFT`+`A` (a capitalized **A**). +- They can be combined: + - `&kp LC(RA(B))` = `LEFT_CONTROL`+`RIGHT_ALT`+`B` +- Some basic codes already include a modifier function in their definition: + - `DOLLAR` = `LS(NUMBER_4)` +- There are left- and right-handed versions of each modifier (also see table above): + - `LS`, `LC`, `LA`, `LG`, `RS`, `RC`, `RA`, `RG` +- Modified keys can safely be rolled-over. Modifier functions are released when another key is pressed. + - Press `&kp LS(A)`, then press `&kp B`, release `&kp LS(A)` and release `&kp B` results in **Ab**. Only the A is capitalized. diff --git a/zmk/docs/docs/codes/power.mdx b/zmk/docs/docs/codes/power.mdx new file mode 100644 index 00000000..7e8ffd10 --- /dev/null +++ b/zmk/docs/docs/codes/power.mdx @@ -0,0 +1,15 @@ +--- +title: Power +sidebar_label: Power +hide_title: true +--- + +import OsLegend from "@site/src/components/codes/OsLegend"; +import ToastyContainer from "@site/src/components/codes/ToastyContainer"; +import Content, { rightToc as contentToc } from "./_power.mdx"; + +export const rightToc = contentToc; + + + + diff --git a/zmk/docs/docs/customization.md b/zmk/docs/docs/customization.md new file mode 100644 index 00000000..d3372da2 --- /dev/null +++ b/zmk/docs/docs/customization.md @@ -0,0 +1,58 @@ +--- +title: Customizing ZMK/`zmk-config` folders +sidebar_label: Customizing ZMK +--- + +After verifying you can successfully flash the default firmware, you will probably want to begin customizing your keymap and other keyboard options. +[In the initial setup tutorial](user-setup), you created a Github repository called `zmk-config`. This repository is a discrete filesystem which works +with the main `zmk` firmware repository to build your desired firmware. The main advantage of a discrete configuration folder is ensuring that the +working components of ZMK are kept separate from your personal keyboard settings, reducing the amount of file manipulation in the configuration process. +This makes flashing ZMK to your keyboard much easier, especially because you don't need to keep an up-to-date copy of zmk on your computer at all times. + +On default `zmk-config` folder should contain two files: + +- `.conf` +- ``.keymap + +However, your config folder can also be modified to include a `boards/` directory for keymaps and configurations for multiple boards/shields +outside of the default keyboard setting definitions. + +## Configuration Changes + +The setup script creates a `config/.conf` file that allows you to add additional configuration options to +control what features and options are built into your firmware. Opening that file with your text editor will allow you to see the +various config settings that can be commented/uncommented to modify how your firmware is built. + +## Keymap + +Once you have the basic user config completed, you can find the keymap file in `config/.keymap` and customize from there. +Refer to the [Keymap](/docs/feature/keymaps) documentation to learn more. + +## Publishing + +After making any changes you want, you should commit the changes and then push them to GitHub. That will trigger a new +GitHub Actions job to build your firmware which you can download once it completes. + +:::note +If you need to, a review of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get these steps right. +::: + +## Building from a local `zmk` fork using `zmk-config` + +[As outlined here](dev-build-flash), firmware comes in the form of .uf2 files, which can be built locally using the command `west build`. Normally, +`west build` will default to using the in-tree .keymap and .conf files found in your local copy of the `zmk` repository. However, you can append the command, `-DZMK_CONFIG="C:/the/absolute/path/config"` to `west build` in order to use the contents of your `zmk-config` folder instead of the +default keyboard settings. +**Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** + +For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: + +``` +west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" +``` + +## Flashing Your Changes + +For normal keyboards, follow the same flashing instructions as before to flash your updated firmware. + +For split keyboards, only the central (left) side will need to be reflashed if you are just updating your keymap. +More troubleshooting information for split keyboards can be found [here](troubleshooting#split-keyboard-halves-unable-to-pair). diff --git a/zmk/docs/docs/dev-boards-shields-keymaps.md b/zmk/docs/docs/dev-boards-shields-keymaps.md new file mode 100644 index 00000000..119db420 --- /dev/null +++ b/zmk/docs/docs/dev-boards-shields-keymaps.md @@ -0,0 +1,52 @@ +--- +title: Boards, Shields, and Keymaps +--- + +## Architecture Overview + +The foundational elements needed to get a specific keyboard working with ZMK can be broken down into: + +- A [KSCAN driver](https://docs.zephyrproject.org/2.3.0/reference/peripherals/kscan.html), which uses `compatible="zmk,kscan-gpio-matrix"` for GPIO matrix based keyboards, or uses `compatible="zmk,kscan-gpio-direct"` for small direct wires. +- An optional matrix transform, which defines how the KSCAN row/column events are translated into logical "key positions". This is required for non-rectangular keyboards/matrices, where the key positions don't naturally follow the row/columns from the GPIO matrix. +- A keymap, which binds each key position to a behavior, e.g. key press, mod-tap, momentary layer, in a set of layers. + +These three core architectural elements are defined per-keyboard, and _where_ they are defined depends on the specifics of how that +keyboard works. For an overview on the general concepts of boards and shields, please see the [FAQs on boards and shields](/docs/faq#why-boards-and-shields--why-not-just-keyboard). + +## Self-Contained Keyboard + +For a self-contained keyboard that includes the microprocessor, all of the above architecture components are included in the Zephyr _board_ definition. You can see an example for the [Planck V6](https://github.com/zmkfirmware/zmk/tree/main/app/boards/arm/planck) board directory. + +With this type of keyboard, the full ZMK definition for the keyboard exists +in the `app/boards/${arch}/${board_name}` directory, e.g. `app/boards/arm/planck/`. In that directory, you'll have the following: + +- A `Kconfig.board` file that defines the toplevel Kconfig item for the board, including which SoC Kconfig setting it depends on. +- A `Kconfig.defconfig` file that sets some initial defaults when building this keyboard. This usually includes: + - Setting `ZMK_KEYBOARD_NAME` to a value, for the product name to be used for USB/BLE info. + - Setting `ZMK_USB` and/or `ZMK_BLE` for the default values for which HID transport(s) to enable by default +- A `${board_name}_defconfig` file that forces specific Kconfig settings that are specific to this hardware configuration. Mostly this is SoC settings around the specific hardware configuration. +- `${board_name}.dts` which contains all the devicetree definitions, including: + - An `#include` line that pulls in the specific microprocessor that is used, e.g. `#include `. + - A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix) + - (Optional) A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. +- A `board.cmake` file with CMake directives for how to flash to the device. +- A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. + +## Pro Micro Compatible Keyboard + +![Labelled Pro Micro pins](assets/pro-micro/pro-micro-pins-labelled.jpg) + +For keyboards that require a (usually Pro Micro compatible) add-on board to operate, the ZMK integration pieces are places +in the _shield_ definition for that keyboard, allowing users to +swap in different Pro Micro compatible boards (e.g. Proton-C, or nice!nano) and build a firmware the matches their actual +combination of physical components. + +With this type of keyboard, the partial definition for the keyboard exists +in the `app/boards/shields/${board_name}` directory, e.g. `app/boards/shields/clueboard_california/`. In that directory, you'll have the following: + +- A `Kconfig.shield` that defines the toplevel Kconfig value for the shield, which uses a supplied utility to function to default the value based on the shield list, e.g. `def_bool $(shields_list_contains,clueboard_california)`. +- A `Kconfig.defconfig` file to set default values for things like `ZMK_KEYBOARD_NAME` +- A `${shield_name}.overlay` file, which is a devicetree overlay file, that includes: + - A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,kscan` which references the configured KSCAN driver (usually a GPIO matrix). For these keyboards, to be compatible with any Pro Micro compatible boards, the KSCAN configuration should reference the [nexus node](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#gpio-nexus-nodes) that ZMK has standardized on. In particular, the `&pro_micro_a` and `&pro_micro_d` aliases can be used to reference the standard `A#` and `D#` pins in shields. + - (Optional) A [chosen](https://docs.zephyrproject.org/2.3.0/guides/dts/intro.html#aliases-and-chosen-nodes) node named `zmk,matrix_transform` that defines the mapping from KSCAN row/column values to the logical key position for the keyboard. +- A `keymap/keymap.overlay` file that includes the default keymap for that keyboard. Users will be able to override this keymap in their user configs. diff --git a/zmk/docs/docs/dev-build-flash.md b/zmk/docs/docs/dev-build-flash.md new file mode 100644 index 00000000..bfdd464d --- /dev/null +++ b/zmk/docs/docs/dev-build-flash.md @@ -0,0 +1,111 @@ +--- +title: Building and Flashing +sidebar_label: Building and Flashing +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +export const OsTabs = (props) => ({props.children}); + +## Building + +From here on, building and flashing ZMK should all be done from the `app/` subdirectory of the ZMK checkout: + +```sh +cd app +``` + +To build for your particular keyboard, the behaviour varies slightly depending on if you are building for a keyboard with +an onboard MCU, or one that uses an MCU board addon. + +### Keyboard (Shield) + MCU Board + +ZMK treats keyboards that take an MCU addon board as [shields](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html), and treats the smaller MCU board as the true [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) + +Given the following: + +- MCU Board: Proton-C +- Keyboard PCB: kyria_left +- Keymap: default + +You can build ZMK with the following: + +```sh +west build -b proton_c -- -DSHIELD=kyria_left +``` + +### Keyboard With Onboard MCU + +Keyboards with onboard MCU chips are simply treated as the [board](https://docs.zephyrproject.org/2.3.0/guides/porting/board_porting.html) as far as Zephyr™ is concerned. + +Given the following: + +- Keyboard: Planck (rev6) +- Keymap: default + +you can build ZMK with the following: + +```sh +west build -b planck_rev6 +``` + +### Pristine Building + +When building for a new board and/or shield after having built one previously, you may need to enable the pristine build option. This option removes all existing files in the build directory before regenerating them, and can be enabled by adding either --pristine or -p to the command: + +```sh +west build -p -b proton_c -- -DSHIELD=kyria_left +``` + +### Building For Split Keyboards + +:::note +For split keyboards, you will have to build and flash each side separately the first time you install ZMK. +::: + +By default, the `build` command outputs a single .uf2 file named `zmk.uf2` so building left and then right immediately after will overwrite your left firmware. In addition, you will need to pristine build each side to ensure the correct files are used. To avoid having to pristine build every time and separate the left and right build files, we recommend setting up separate build directories for each half. You can do this by using the `-d` parameter and first building left into `build/left`: + +``` +west build -d build/left -b nice_nano -- -DSHIELD=kyria_left +``` + +and then building right into `build/right`: + +``` +west build -d build/right -b nice_nano -- -DSHIELD=kyria_right +``` + +This produces `left` and `right` subfolders under the `build` directory and two separate .uf2 files. For future work on a specific half, use the `-d` parameter again to ensure you are building into the correct location. + +### Building from `zmk-config` Folder + +Instead of building .uf2 files using the default keymap and config files, you can build directly from your [`zmk-config` folder](user-setup#github-repo) by adding +`-DZMK_CONFIG="C:/the/absolute/path/config"` to your `west build` command. **Notice that this path should point to the folder labelled `config` within your `zmk-config` folder.** + +For instance, building kyria firmware from a user `myUser`'s `zmk-config` folder on Windows 10 may look something like this: + +``` +west build -b nice_nano -- -DSHIELD=kyria_left -DZMK_CONFIG="C:/Users/myUser/Documents/Github/zmk-config/config" +``` + +## Flashing + +Once built, the previously supplied parameters will be remembered so you can run the following to flash your +board with it in bootloader mode: + +``` +west flash +``` + +For boards that have drag and drop .uf2 flashing capability, the .uf2 file to flash can be found in `build/zephyr` (or `build/left|right/zephyr` if you followed the instructions for splits) and is by default named `zmk.uf2`. diff --git a/zmk/docs/docs/dev-clean-room.md b/zmk/docs/docs/dev-clean-room.md new file mode 100644 index 00000000..82db3a04 --- /dev/null +++ b/zmk/docs/docs/dev-clean-room.md @@ -0,0 +1,28 @@ +--- +title: Clean Room Implementation +sidebar_label: Clean Room +--- + +:::warning + +Anyone wanting to contribute code to ZMK _MUST_ read this, and adhere to the steps outlines in order to not violate any licenses/copyright of other projects + +::: + +ZMK Firmware is a [clean room design](https://en.wikipedia.org/wiki/Clean_room_design) keyboard firmware, that +borrows/implements a lot of the features found in popular keyboard firmwares projects like [QMK](https://qmk.fm) +and [TMK](https://github.com/tmk/tmk_keyboard). However, in order for ZMK to use the MIT, it _must_ not +incorporate any of the GPL licensed code from those projects. + +In order to achieve this, all code for ZMK has been implemented completely fresh, _without_ referencing, copying, +or duplicating any of the GPL code found in those other projects, even though they are open source software. + +## Contributor Requirements + +Contributors to ZMK must adhere to the following standard. + +- Implementations of features for ZMK _MUST NOT_ reuse any existing code from any projects not licensed with the MIT license. +- Contributors _MUST NOT_ study or refer to any GPL licensed source code while working on ZMK. +- Contributors _MAY_ read the documentation from other GPL licensed projects, to gain a broad understanding of the behavior of certain features in order to implement equivalent features for ZMK. +- Contributors _MAY_ refer to the [QMK Configurator](https://config.qmk.fm/) to inspect existing layouts/keymaps for + keyboards, and re-implement them for ZMK. diff --git a/zmk/docs/docs/dev-guide-new-shield.md b/zmk/docs/docs/dev-guide-new-shield.md new file mode 100644 index 00000000..70a847cb --- /dev/null +++ b/zmk/docs/docs/dev-guide-new-shield.md @@ -0,0 +1,537 @@ +--- +title: New Keyboard Shield +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Overview + +This guide will walk through the steps necessary to add ZMK support for a keyboard the uses a (Pro Micro compatible) addon MCU board to provide the microprocessor. +The high level steps are: + +- Create a new shield directory. +- Add the base Kconfig files. +- Add the shield overlay file to define the KSCAN driver for detecting key press/release. +- (Optional) Add the matrix transform for mapping KSCAN row/column values to sane key positions. This is needed for non-rectangular keyboards, or where the underlying row/column pin arrangement does not map one to one with logical locations on the keyboard. +- Add a default keymap, which users can override in their own configs as needed. +- Add support for features such as encoders, OLED displays, or RGB underglow. +- Update build.yml + +It may be helpful to review the upstream [shields documentation](https://docs.zephyrproject.org/2.3.0/guides/porting/shields.html#shields) to get a proper understanding of the underlying system before continuing. + +:::note +ZMK support for split keyboards requires a few more files than single boards to ensure proper connectivity between the central and peripheral units. Check the following guides thoroughly to ensure that all the files are in place. +::: + +## New Shield Directory + +:::note +This guide describes how to add shield to the ZMK main repository. If you are building firmware for your +own prototype or handwired keyboard, it is recommended to use your own user config repository. Follow the +[user setup guide](./user-setup.md) to create your user config repository first. When following the rest +of this guide, replace the `app/` directory in the ZMK main repository with the `config/` directory in your +user config repository. For example, `app/boards/shields/` should now be +`config/boards/shields/`. +::: + +Shields for Zephyr applications go into the `boards/shields/` directory; since ZMK's Zephyr application lives in the `app/` subdirectory of the repository, that means the new shield directory should be: + +```bash +mkdir app/boards/shields/ +``` + +## Base Kconfig Files + +There are two required Kconfig files that need to be created for your new keyboard +shield to get it picked up for ZMK, `Kconfig.shield` and `Kconfig.defconfig`. + +### Kconfig.shield + +The `Kconfig.shield` file defines any additional Kconfig settings that may be relevant when using this keyboard. For most keyboards, there is just one additional configuration value for the shield itself, e.g.: + +``` +config SHIELD_MY_BOARD + def_bool $(shields_list_contains,my_board) +``` + +This will make sure the new configuration `SHIELD_MY_BOARD` is set to true whenever `my_board` is added as a shield in your build. + +**For split boards**, you will need to add configurations for the left and right sides. + +``` +config SHIELD_MY_BOARD_LEFT + def_bool $(shields_list_contains,my_board_left) + +config SHIELD_MY_BOARD_RIGHT + def_bool $(shields_list_contains,my_board_right) +``` + +### Kconfig.defconfig + +The `Kconfig.defconfig` file is where overrides for various configuration settings +that make sense to have different defaults when this shield is used. One main item +that usually has a new default value set here is the `ZMK_KEYBOARD_NAME` value, +which controls the display name of the device over USB and BLE. + +The updated new default values should always be wrapped inside a conditional on the shield config name defined in the `Kconfig.shield` file. Here's the simplest example file. + +:::warning +Do not make the keyboard name too long, otherwise the bluetooth advertising might fail and you will not be able to find your keyboard from your laptop / tablet. +::: + +``` +if SHIELD_MY_BOARD + +config ZMK_KEYBOARD_NAME + default "My Awesome Keyboard" + +endif +``` + +Similarly to defining the halves of a split board in `Kconfig.shield` it is important to set the `ZMK_KEYBOARD_NAME` for each half of a split keyboard. + +``` +if SHIELD_MY_BOARD_LEFT + +config ZMK_KEYBOARD_NAME + default "My Awesome Keyboard Left" + +endif + +if SHIELD_MY_BOARD_RIGHT + +config ZMK_KEYBOARD_NAME + default "My Awesome Keyboard Right" + +endif +``` + +## Shield Overlays + +![Labelled Pro Micro pins](assets/pro-micro/pro-micro-pins-labelled.jpg) + +ZMK uses the green color coded pin names to generate devicetree node references. For example, to refer to the node `D0` in the devicetree files, use `&pro_micro_d 0` or to refer to `A1`, use `&pro_micro_a 1`. + + + + + +The `.overlay` is the devicetree description of the keyboard shield that is merged with the primary board devicetree description before the build. For ZMK, this file at a minimum should include the chosen node named `zmk,kscan` that references a KSCAN driver instance. For a simple 3x3 macropad matrix, +this might look something like: + +``` +/ { + chosen { + zmk,kscan = &kscan0; + }; + + kscan0: kscan_0 { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + diode-direction = "col2row"; + + col-gpios + = <&pro_micro_d 15 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> + ; + + row-gpios + = <&pro_micro_a 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + , <&pro_micro_a 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> + ; + }; +}; +``` + + + + + +### .dtsi files and Shield Overlays (Split Shields) + +Unlike unibody keyboards, split keyboards have a core .dtsi file with shield overlays for each half of the keyboard. +It is preferred to define only the `col-gpios` or `row-gpios` in the common shield .dtsi, depending on the `diode-direction` value. +For `col2row` directed boards like the iris, the shared .dtsi file may look like this: + +``` +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <16>; + rows = <4>; +// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | +// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | +// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | +// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW25 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | +// | SW29 | SW28 | SW27 | SW26 | | SW26 | SW27 | SW28 | SW29 | + map = < +RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) +RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) +RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) +RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,2) RC(4,9) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) + RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) + >; + }; + + kscan0: kscan { + compatible = "zmk,kscan-gpio-matrix"; + label = "KSCAN"; + + diode-direction = "col2row"; + row-gpios + = <&pro_micro_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A from the schematic file + , <&pro_micro_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B from the schematic file + , <&pro_micro_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C from the schematic file + , <&pro_micro_d 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D from the schematic file + , <&pro_micro_d 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row E from the schematic file + ; + + }; +``` + +:::note +Notice that in addition to the common `row-gpios` that are declared in the kscan, the [matrix transform](#optional-matrix-transform) is defined in the .dtsi. +::: + +The missing `col-gpios` would be defined in your `_left.overlay` and `_right.overlay` files. +Keep in mind that the mirrored position of the GPIOs means that the `col-gpios` will appear reversed when the .overlay files are compared to one another. +Furthermore, the column offset for the [matrix transform](#optional-matrix-transform) should be added to the right half of the keyboard's overlay +because the keyboard's switch matrix is read from left to right, top to bottom. +This is exemplified with the iris .overlay files. + +``` +// iris_left.overlay + +#include "iris.dtsi" // Notice that the main dtsi files are included in the overlay. + +&kscan0 { + col-gpios + = <&pro_micro_a 1 GPIO_ACTIVE_HIGH> // col1 in the schematic + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro_d 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + ; +}; +``` + +``` +// iris_right.overlay + +#include "iris.dtsi" + +&default_transform { // The matrix transform for this board is 6 columns over because the left half is 6 columns wide according to the matrix. + col-offset = <6>; +}; + +&kscan0 { + col-gpios + = <&pro_micro_d 10 GPIO_ACTIVE_HIGH> // col6 in the schematic + , <&pro_micro_d 16 GPIO_ACTIVE_HIGH> // col5 in the schematic + , <&pro_micro_d 14 GPIO_ACTIVE_HIGH> // col4 in the schematic + , <&pro_micro_d 15 GPIO_ACTIVE_HIGH> // col3 in the schematic + , <&pro_micro_a 0 GPIO_ACTIVE_HIGH> // col2 in the schematic + , <&pro_micro_a 1 GPIO_ACTIVE_HIGH> // col1 in the schematic + ; +}; + +``` + +### .conf files (Split Shields) + +While unibody boards only have one .conf file that applies configuration characteristics to the entire keyboard, +split keyboards are unique in that they contain multiple .conf files with different scopes. +For example, a split board called `my_awesome_split_board` would have the following files: + +- `my_awesome_split_board.conf` - Configuration elements affect both halves +- `my_awesome_split_board_left.conf` - Configuration elements only affect left half +- `my_awesome_split_board_right.conf` - Configuration elements only affect right half + +For proper communication between keyboard halves and that between the central half and the computer, +the **the central and peripheral halves of the keyboard must be defined**. This can be seen below. + +``` +// Central Half (Usually the left side: my_awesome_split_board_left.conf) + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL=y +``` + +``` +// Peripheral Half (Usually the right side: my_awesome_split_board_right.conf) + +CONFIG_ZMK_SPLIT=y +CONFIG_ZMK_SPLIT_BLE_ROLE_Peripheral=y +``` + +Using the .conf file that affects both halves of a split board would be for adding features like deep-sleep or rotary encoders. + +``` +// my_awesome_split_board.conf + +CONFIG_ZMK_SLEEP=y +``` + + + + +## (Optional) Matrix Transform + +Internally ZMK translates all row/column events into "key position" events to maintain a consistent model that works no matter what any possible GPIO matrix may look like for a certain keyboard. This is particularly helpful when: + +1. To reduce the used pins, an "efficient" number of rows/columns for the GPIO matrix is used, that does _not_ match the physical layout of rows/columns of the actual key switches. +1. For non rectangular keyboards with thumb clusters, non `1u` locations, etc. + +A "key position" is the numeric index (zero-based) of a given key, which identifies +the logical key location as perceived by the end user. All _keymap_ mappings actually bind behaviors to _key positions_, not to row/column values. + +_Without_ a matrix transform, that intentionally map each key position to the row/column pair that position corresponds to, the default equation to determine that is: + +``` +($row * NUMBER_OF_COLUMNS) + $column +``` + +Which effectively amounts to numbering the key positions by traversing each row from top to bottom and assigning numerically incrementing key positions. + +Whenever that default key position mapping is insufficient, the `.overlay` file should _also_ include a matrix transform. + +Here is an example for the [nice60](https://github.com/Nicell/nice60), which uses an efficient 8x8 GPIO matrix, and uses a transform: + +``` +#include + +/ { + chosen { + zmk,kscan = &kscan0; + zmk,matrix_transform = &default_transform; + }; + + default_transform: keymap_transform_0 { + compatible = "zmk,matrix-transform"; + columns = <8>; + rows = <8>; +// | MX1 | MX2 | MX3 | MX4 | MX5 | MX6 | MX7 | MX8 | MX9 | MX10 | MX11 | MX12 | MX13 | MX14 | +// | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 | MX21 | MX22 | MX23 | MX34 | MX25 | MX26 | MX27 | MX28 | +// | MX29 | MX30 | MX31 | MX32 | MX33 | MX34 | MX35 | MX36 | MX37 | MX38 | MX39 | MX40 | MX41 | +// | MX42 | MX43 | MX44 | MX45 | MX46 | MX47 | MX48 | MX49 | MX50 | MX51 | MX52 | MX53 | +// | MX54 | MX55 | MX56 | MX57 | MX58 | MX59 | MX60 | MX61 | + map = < +RC(3,0) RC(2,0) RC(1,0) RC(0,0) RC(1,1) RC(0,1) RC(0,2) RC(1,3) RC(0,3) RC(1,4) RC(0,4) RC(0,5) RC(1,6) RC(1,7) +RC(4,0) RC(4,1) RC(3,1) RC(2,1) RC(2,2) RC(1,2) RC(2,3) RC(3,4) RC(2,4) RC(2,5) RC(1,5) RC(2,6) RC(2,7) RC(3,7) +RC(5,0) RC(5,1) RC(5,2) RC(4,2) RC(3,2) RC(4,3) RC(3,3) RC(4,4) RC(4,5) RC(3,5) RC(4,6) RC(3,6) RC(4,7) +RC(6,0) RC(6,1) RC(6,2) RC(6,3) RC(5,3) RC(6,4) RC(5,4) RC(6,5) RC(5,5) RC(6,6) RC(5,6) RC(5,7) +RC(7,0) RC(7,1) RC(7,2) RC(7,3) RC(7,5) RC(7,6) RC(6,7) RC(7,7) + >; + }; +``` + +Some important things to note: + +- The `#include ` is critical. The `RC` macro is used to generate the internal storage in the matrix transform, and is actually replaced by a C preprocessor before the final devicetree is compiled into ZMK. +- `RC(row, column)` is placed sequentially to define what row and column values that position corresponds to. +- If you have a keyboard with options for `2u` keys in certain positions, or break away portions, it is a good idea to set the chosen `zmk,matrix_transform` to the default arrangement, and include _other_ possible matrix transform nodes in the devicetree that users can select in their user config by overriding the chosen node. + +## Default Keymap + +Each keyboard should provide an OOTB default keymap to be used when building the firmware, which can be overridden and customized by user configs. For "shield keyboards", this should be placed in the `app/boards/shields//.keymap` file. The keymap is configured as an additional devicetree overlay that includes the following: + +- A node with `compatible="zmk,keymap"` where each child node is a layer with a `bindings` array that binds each key position to a given behavior (e.g. key press, momentarily layer, etc). + +Here is an example simple keymap for the Kyria, with only one layer: + +``` +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | +// | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; + +``` + +:::note +The two `#include` lines at the top of the keymap are required in order to bring in the default set of behaviors to make them available to bind, and to import a set of defines for the key codes, so keymaps can use parameters like `N2` or `K` instead of the raw keycode numeric values. +::: + +### Keymap Behaviors + +Further documentation on behaviors and bindings is forthcoming, but a summary of the current behaviors you can bind to key positions is as follows: + +- `kp` is the "key press" behavior, and takes a single binding argument of the key code from the 'keyboard/keypad" HID usage table. +- `mo` is the "momentary layer" behaviour, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held. +- `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required. +- `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped. + +## Adding Features + +### Encoders + +EC11 encoder support can be added to your board or shield by adding the appropriate lines to your board/shield's configuration (.conf), device tree (.dtsi), overlay (.overlay), and keymap (.keymap) files. + + + + +In your configuration file you will need to add the following lines so that the encoders can be enabled/disabled: + +``` +# Uncomment to enable encoder +# CONFIG_EC11=y +# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y +``` + +These should be commented by default for encoders that are optional/can be swapped with switches, but can be uncommented if encoders are part of the default design. + +:::note +If building locally for split boards, you may need to add these lines to the specific half's configuration file as well as the combined configuration file. +::: + + + +In your device tree file you will need to add the following lines to define the encoder sensor: + +``` +left_encoder: encoder_left { + compatible = "alps,ec11"; + label = "LEFT_ENCODER"; + a-gpios = ; + b-gpios = ; + resolution = <4>; + }; +``` + +Here you will have to replace PIN_A and PIN_B with the appropriate pins that your PCB utilizes for the encoder(s). For keyboards that use the Pro Micro or any of the Pro Micro replacements, Sparkfun's [Pro Micro Hookup Guide](https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/hardware-overview-pro-micro) has a pinout diagram that can be useful to determine the right pins. Reference either the blue numbers labeled "Arduino" (digital pins) or the green numbers labeled "Analog" (analog pins). For pins that are labeled as both digital and analog, refer to your specific board's .dtsi file to determine how you should refer to that pin. + +Add additional encoders as necessary by duplicating the above lines, replacing `left` with whatever you would like to call your encoder, and updating the pins. Note that support for peripheral (right) side sensors over BLE is still in progress. + +Once you have defined the encoder sensors, you will have to add them to the list of sensors: + +``` +sensors { + compatible = "zmk,keymap-sensors"; + sensors = <&left_encoder &right_encoder>; + }; +``` + +In this example, a left_encoder and right_encoder are both added. Additional encoders can be added with spaces separating each, and the order they are added here determines the order in which you define their behavior in your keymap. + + + +Add the following lines to your overlay file(s) to enable the encoder: + +``` +&left_encoder { + status = "okay"; +}; +``` + +:::note +For split keyboards, make sure to add left hand encoders to the left .overlay file and right hand encoders to the right .overlay file. +::: + + + +Add the following line to your keymap file to add default encoder behavior bindings: + +``` +sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>; +``` + +Add additional bindings as necessary to match the default number of encoders on your board. See the [Encoders](/docs/feature/encoders) and [Keymap](/docs/feature/keymaps) feature documentation for more details. + + + + +## Testing + +Once you've fully created the new keyboard shield definition, +you should be able to test with a build command like: + +``` +west build --pristine -b proton_c -- -DSHIELD=my_board +``` + +and then flash with: + +``` +west flash +``` + +:::note +Further testing your keyboard shield without altering the root keymap file can be done with the use of `-DZMK_CONFIG` in your `west build` command, +shown [here](dev-build-flash#building-from-zmk-config-folder) +::: + +## Updating `build.yml` + +Before publishing your shield to the public via a PR, navigate to `build.yml` found in `.github/workflows` and add your shield to the appropriate list. An example edit to `build.yml` is shown below. + +``` +jobs: + build: + runs-on: ubuntu-latest + name: Build Test + strategy: + matrix: + board: [proton_c, nice_nano, bluemicro840_v1, nrfmicro_13] + shield: + - corne_left + - corne_right + - kyria_left + - kyria_right + - lily58_left + - lily58_right + - iris_left + - iris_right + - romac + - + - + - + include: + - board: proton_c + shield: clueboard_california +``` + +:::note +Notice that both the left and right halves of a split board need to be added to the list of shields for proper error checking. +:::note diff --git a/zmk/docs/docs/dev-guide-usb-logging.md b/zmk/docs/docs/dev-guide-usb-logging.md new file mode 100644 index 00000000..3dc62e36 --- /dev/null +++ b/zmk/docs/docs/dev-guide-usb-logging.md @@ -0,0 +1,103 @@ +--- +title: USB Logging +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +## Overview + +If you are developing ZMK on a device that does not have a built in UART for debugging and log/console output, +Zephyr can be configured to create a USB CDC ACM device and the direct all `printk`, console output, and log +messages to that device instead. + +:::warning Battery Life Impact + +Enabling logging increases the power usage of your keyboard, and can have a non-trivial impact to your time on battery. +It is recommended to only enable logging when needed, and not leaving it on by default. + +::: + +## Kconfig + +The following KConfig values need to be set, either by copy and pasting into the `app/prj.conf` file, or by running +`west build -t menuconfig` and manually enabling the various settings in that UI. + +:::note +If you are debugging your own keyboard in your [user config repository](./user-setup.md), use +`config/boards/shields//.conf` instead of `app/prj.conf`. In Github +Actions, you can search the `Kconfig file` build log to verify the options above have been enabled +for you successfully. +::: + +``` +# Turn on logging, and set ZMK logging to debug output +CONFIG_LOG=y +CONFIG_ZMK_LOG_LEVEL_DBG=y + +# Turn on USB CDC ACM device +CONFIG_USB=y +CONFIG_USB_DEVICE_STACK=y +CONFIG_USB_CDC_ACM=y +CONFIG_USB_CDC_ACM_RINGBUF_SIZE=1024 +CONFIG_USB_CDC_ACM_DEVICE_NAME="CDC_ACM" +CONFIG_USB_CDC_ACM_DEVICE_COUNT=1 + +# Enable serial console +CONFIG_SERIAL=y +CONFIG_CONSOLE=y +CONFIG_UART_INTERRUPT_DRIVEN=y +CONFIG_UART_LINE_CTRL=y + +# Enable USB UART, and set the console device +CONFIG_UART_CONSOLE=y +CONFIG_USB_UART_CONSOLE=y +CONFIG_UART_CONSOLE_ON_DEV_NAME="CDC_ACM_0" +CONFIG_USB_UART_DTR_WAIT=n +``` + +## Viewing Logs + +After flashing the updated ZMK image, the board should expose a USB CDC ACM device that you can connect to and view the logs. + + + + +On Linux, this should be a device like `/dev/ttyACM0` and you can connect with `minicom` or `tio` as usual, e.g.: + +``` +sudo tio /dev/ttyACM0 +``` + + + + +On Windows, you can use [PuTTY](https://www.putty.org/). Once installed, use Device Manager to figure out which COM port your controller is communicating on (listed under 'Ports (COM & LPT)') and specify that as the 'Serial line' in PuTTY. + +![Controller COM port](./assets/usb-logging/com.jpg) + +![PuTTY settings](assets/usb-logging/putty.jpg) + +If you already have the Ardunio IDE installed you can also use its built-in Serial Monitor. + + + + +On MacOS, the device name is something like `/dev/tty.usbmodemXXXXX` where `XXXXX` is some numerical ID. +You can connect to the device with [tio](https://tio.github.io/) (can be installed via [Homebrew](https://formulae.brew.sh/formula/tio)): + +``` +sudo tio /dev/tty.usbmodem14401 +``` + +You should see tio printing `Disconnected` or `Connected` when you disconnect or reconnect the USB cable. + + + +From there, you should see the various log messages from ZMK and Zephyr, depending on which systems you have set to what log levels. diff --git a/zmk/docs/docs/dev-posix-board.md b/zmk/docs/docs/dev-posix-board.md new file mode 100644 index 00000000..71460a87 --- /dev/null +++ b/zmk/docs/docs/dev-posix-board.md @@ -0,0 +1,38 @@ +--- +title: Native Posix board target +--- + +In order to iterate quickly on firmware features, it can +be helpful to build and run the firmware on your local +workstation, with generated virtual press/release events +flowing into the handler functions. + +## Prerequisites + +In order to build targeting the `native_posix` board, you need to setup your system +with a compiler that can target 32-bit POSIX. + +On Debian, you can do this with: + +``` +apt install -y gcc-multilib +``` + +## Building + +To do this, you can build ZMK targeting the +`native_posix` board. + +``` +west build --pristine --board native_posix +``` + +Once built, you can run the firmware locally: + +``` +./build/zephyr/zephyr.exe +``` + +## Virtual Key Events + +The virtual key presses are hardcoded in `boards/native_posix.overlay` file, should you want to change the sequence to test various actions like Mod-Tap, etc. diff --git a/zmk/docs/docs/dev-setup.md b/zmk/docs/docs/dev-setup.md new file mode 100644 index 00000000..864574a4 --- /dev/null +++ b/zmk/docs/docs/dev-setup.md @@ -0,0 +1,554 @@ +--- +title: Basic Setup +sidebar_label: Basic Setup +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +export const OsTabs = (props) => ({props.children}); + +## Prerequisites + +ZMK requires the following base packages to first be installed: + +- Git +- Python 3 +- `pip` +- `wget` +- devicetree compiler +- CMake +- `dfu-util` +- Various build essentials, e.g. gcc, automake, autoconf + + + + +On Debian and Ubuntu, we'll use `apt` to install our base dependencies: + +First, if you haven't updated recently, or if this is a new install, +you should update to get the latest package information: + +```sh +sudo apt update +``` + +With the latest package information, you can now install the base dependencies: + +```sh +sudo apt install -y \ + git \ + wget \ + autoconf \ + automake \ + build-essential \ + bzip2 \ + ccache \ + device-tree-compiler \ + dfu-util \ + g++ \ + gcc \ + libtool \ + make \ + ninja-build \ + cmake \ + python3-dev \ + python3-pip \ + python3-setuptools \ + xz-utils +``` + +:::note +Ubuntu 18.04 LTS release packages a version of CMake that is too old. Please upgrade to Ubuntu 20.04 LTS +or download and install CMake version 3.13.1 or newer manually. +::: + + + +On Raspberry OS, we'll use `apt` to install our base dependencies: + +First, if you haven't updated recently, or if this is a new install, +you should update to get the latest package information: + +```sh +sudo apt update +``` + +With the latest package information, you can now install the base dependencies: + +```sh +sudo apt install -y \ + git \ + wget \ + autoconf \ + automake \ + build-essential \ + bzip2 \ + ccache \ + device-tree-compiler \ + dfu-util \ + g++ \ + gcc \ + libtool \ + make \ + ninja-build \ + cmake \ + python3-dev \ + python3-pip \ + python3-setuptools \ + xz-utils +``` + + + + +On Fedora, we'll use `dnf` to install our base dependencies: + +#### DNF Update + +First, if you haven't updated recently, or if this is a new install, +you should update to get the latest package information: + +```sh +sudo dnf update +``` + +#### Install Dependencies + +With the latest package information, you can now install the base dependencies: + +```sh +sudo dnf install -y \ + git \ + wget \ + autoconf \ + automake \ + bzip2 \ + ccache \ + dtc \ + dfu-util \ + g++ \ + gcc \ + libtool \ + make \ + ninja-build \ + cmake \ + python3-devel \ + python3-pip \ + python3-setuptools \ + xz +``` + + + + +:::note +Use `cmd.exe` with these instructions rather than PowerShell. +::: + +Chocolatey is recommended and used for the following instructions. You can manually install each of these applications and add them to your `PATH` if you don't want to use Chocolatey. + +1. [Install Chocolatey](https://chocolatey.org/install) +2. Open `cmd.exe` as **Administrator** +3. Run the following `choco` commands: + ```shell + choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System' + choco install ninja gperf python git + ``` + +It is recommended to install `dfu-util` to avoid any later confusion while flashing devices. You can do this by running this command with chocolatey: + +```shell +choco install dfu-util +``` + + + + +#### Homebrew + +Homebrew is required to install the system dependencies. If you haven't done so, visit [Homebrew](https://brew.sh/) for instructions. Once installed, use it to install the base dependencies: + +``` +brew install cmake ninja python3 ccache dtc git wget dfu-util +``` + + + + +This setup leverages the same [image which is used by the GitHub action](https://github.com/zmkfirmware/zephyr-west-action) for local development. Beyond the benefits of [dev/prod parity](https://12factor.net/dev-prod-parity), this approach is also the easiest to set up. No toolchain or dependencies are necessary when using Docker; the container image you'll be using already has the toolchain installed and set up to use. + +1. Install [Docker Desktop](https://www.docker.com/products/docker-desktop) for your operating system. +2. Install [VS Code](https://code.visualstudio.com/) +3. Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) + +:::info +The docker container includes `west` and the compilation toolchain. If you're using docker and VS Code, you can skip right to [Source Code](#source-code). +::: + + + + +## Setup + +### West Installation + +`west` is the [Zephyr™ meta-tool](https://docs.zephyrproject.org/2.3.0/guides/west/index.html) used to configure and build Zephyr™ applications. + +West can be installed by using the `pip` python package manager. The [Zephyr™ instructions](https://docs.zephyrproject.org/latest/guides/west/install.html#installing-west) are summarized here: + + + + +```sh +pip3 install --user -U west +``` + + + + +In `cmd.exe` as **Administrator**: + +```sh +pip3 install -U west +``` + +:::note +**For Windows, do not use the `--user` argument** that Linux uses otherwise `west` will be installed in a different location and the below instructions for adding Python `pip` will no longer apply. +::: + +Once `west` is installed, close Command Prompt and open a new session as a **user** for the remainder of the instructions. + + + + +:::danger `pip` user packages +If you haven't done so yet, you may need to add the Python `pip` package directory to your `PATH` otherwise your computer will not be able to find the `west` command. +::: + + + +Run the following commands: + +```sh +echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc +source ~/.bashrc +``` + + + + +1. See the [Environment Variables](#environment-variables) section on how to get to the Environment Variables page. +2. Under "System variables" select the "Path" variable. Click "Edit..." and then "New" to add the directory where your `west.exe` is located. By default this should be `C:\Python##\Scripts` where ## is your Python version number. +3. Close Command Prompt and open a new session for the changes to take effect, or run `refreshenv`. + + + + +### Toolchain Installation + +The toolchain provides the compiler, linker, etc., necessary to build for the target +platform. + + + + +#### Zephyr™ ARM SDK + +To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: + +``` +export ZSDK_VERSION=0.11.2 +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" +``` + +The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. + + + + +Because Raspberry OS (Raspbian) runs on the same architecture (but different ABI) as the keyboard MCUs, +the operating system's installed [cross compilers](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_other_x_compilers.html) can be used to target the different ABI. + +First, the cross compiler should be installed: + +```sh +sudo apt install gcc-arm-none-eabi +``` + +Next, we'll configure Zephyr™ with some extra environment variables needed to find the cross compiler by adding the following to `~/.zephyrrc`: + +```sh +export ZEPHYR_TOOLCHAIN_VARIANT=cross-compile +export CROSS_COMPILE=/usr/bin/arm-none-eabi- +``` + + + + +#### Zephyr™ ARM SDK + +To build firmwares for the ARM architecture (all supported MCUs/keyboards at this point), you'll need to install the Zephyr™ ARM SDK to your system: + +``` +export ZSDK_VERSION=0.11.2 +wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \ + sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \ + rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run" +``` + +The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected. + + + + +#### GNU ARM Embedded + +Since the Zephyr™ SDK is not available for Windows, we recommending following the [Zephyr documentation](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded) to install a GNU ARM Embedded build. Note the warnings regarding installing the toolchain into a path with spaces, and make sure to follow the steps to add the environment variables which are also summarized with screenshots in the [Environment Variables](#environment-variables) section below. + + + + +#### GNU ARM Embedded + +Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded). + +:::warning Security Controls Workaround + +Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.3.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer + +::: + + + + +:::note +If you intend to build firmware straight away, make sure to correctly setup the current shell. + +Notes on setting this up can be found in the [Environment Variables](#environment-variables) section. +The transient instructions can be used to setup the current shell, and the automatic instructions can setup any newly made shells automatically. + +The transient instructions must be run to build firmware using the current shell. +::: + +### Source Code + +Next, you'll need to clone the ZMK source repository if you haven't already. Navigate to the folder you would like to place your `zmk` directory in and run the following command: + +``` +git clone https://github.com/zmkfirmware/zmk.git +``` + +### Initialize & Update Zephyr Workspace + +Since ZMK is built as a Zephyr™ application, the next step is +to use `west` to initialize and update your workspace. The ZMK +Zephyr™ application is in the `app/` source directory: + +#### Step into the repository + + + + +```sh +cd zmk +``` + + + + +```sh +cd zmk +``` + + + + +```sh +cd zmk +``` + + + + +```sh +cd zmk +``` + + + + +```sh +cd zmk +``` + + + + + +Open the `zmk` checkout folder in VS Code. The repository includes a configuration for containerized development, so an alert will pop up: + +![VS Code Dev Container Configuration Alert](assets/dev-setup/vscode_devcontainer.png) + +Click `Reopen in Container` in order to reopen the VS Code with the running container. + +The first time you do this on your machine, it will pull the docker image down from the registry and build the container. Subsequent launches are much faster! + +:::caution +All subsequent steps must be performed from the VS Code terminal _inside_ the container. +::: + + + + +#### Initialize West + +```sh +west init -l app/ +``` + +:::caution Command Not Found? +If you encounter errors like `command not found: west` then your `PATH` environment variable is likely +missing the Python 3 user packages directory. See the [West Build Command](#west-build-command) +section again for links to how to do this +::: + +#### Update To Fetch Modules + +```sh +west update +``` + +:::tip +This step pulls down quite a bit of tooling. Go grab a cup of coffee, it can take 10-15 minutes even on a good internet connection! +::: + +:::info +If you're using Docker, you're done with setup! You must restart the container at this point. The easiest way to do so is to close the VS Code window, verify that the container has stopped in Docker Dashboard, and reopen the container with VS Code. + +Once your container is restarted, proceed to [Building and Flashing](./dev-build-flash.md). +::: + +#### Export Zephyr™ Core + +```sh +west zephyr-export +``` + +#### Install Zephyr Python Dependencies + +```sh +pip3 install --user -r zephyr/scripts/requirements-base.txt +``` + +### Environment Variables + + + + +#### For GNU ARM Embedded on Windows + +On Windows, only two environment variables need to be set for ZMK to build properly: `ZEPHYR_TOOLCHAIN_VARIANT` and `GNUARMEMB_TOOLCHAIN_PATH`. + +1. Open Start Menu and type 'env' to find the 'Edit the system environment variables' option. Open it. + +![Environment variables in Start Menu](assets/env-var/start_menu.png) + +2. Click 'Environment Variables...'. + +![Environment variables button](assets/env-var/env_var.png) + +3. Click "New..." under System variables to create a new system variable. + +![Environment variables menu](assets/env-var/new_variable.png) + +4. Set the variable name to 'ZEPHYR_TOOLCHAIN_VARIANT' and value to 'gnuarmemb'. Click OK to save. + +![Adding Zephyr toolchain variable](assets/env-var/zephyr_toolchain.png) + +5. Create another variable with variable name 'GNUARMEMB_TOOLCHAIN_PATH' and value set to wherever you installed your toolchain. **Make sure this path does not contain any spaces.** If it does, rename the folder and update here. Click OK to save. + +![Adding GNUARMEMB variable](assets/env-var/gnuarmemb.png) + +6. Close Command Prompt and reopen, or run `refreshenv` to apply the changes. + + + + + +#### For Zephyr + +By default, the Zephyr™ SDK will create a file named `~/.zephyrrc` with the correct environment variables to build ZMK. +We suggest two main [options](https://docs.zephyrproject.org/2.3.0/guides/env_vars.html?highlight=zephyrrc) for how to load those settings. + +##### Per Shell + +To load the Zephyr environment properly for just one transient shell, run the following from your ZMK checkout directory: + +``` +source zephyr/zephyr-env.sh +``` + +##### All Shells + +To load the environment variables for your shell every time, +append the existing `~/.zephyrrc` file to your shell's RC file and then start a new shell. + + + + + +``` +cat ~/.zephyrrc >> ~/.bashrc +``` + + + + + +``` +cat ~/.zephyrrc >> ~/.zshrc +``` + + + + + + + + diff --git a/zmk/docs/docs/dev-tests.md b/zmk/docs/docs/dev-tests.md new file mode 100644 index 00000000..98381d7f --- /dev/null +++ b/zmk/docs/docs/dev-tests.md @@ -0,0 +1,20 @@ +--- +title: Tests +sidebar_label: Tests +--- + +Running tests requires [native posix support](./dev-posix-board). Any folder under `/app/tests` +containing `native_posix.keymap` will be selected when running `./run-test.sh all`. + +## Creating a New Test Set + +1. Copy the test set that most closely resembles the tests you will be creating. +2. Rename the newly created test set to the behavior you're testing e.g, toggle-layer +3. Modify `behavior_keymap.dtsi` to create a keymap using the behavior and related behaviors +4. Modify `test_case/native_posix.keymap` for a simulated use case +5. Modify `test_case/events.patterns` to collect relevant logs to the test + - See: [sed manual](https://www.gnu.org/software/sed/manual/sed.html) and + [tutorial](https://www.digitalocean.com/community/tutorials/the-basics-of-using-the-sed-stream-editor-to-manipulate-text-in-linux) +6. Modify `test_case/keycode_events.snapshot` for to include the expected output +7. Rename the `test_case` folder to describe the test. +8. Repeat steps 4 to 7 for every test case diff --git a/zmk/docs/docs/faq.md b/zmk/docs/docs/faq.md new file mode 100644 index 00000000..3822c0d8 --- /dev/null +++ b/zmk/docs/docs/faq.md @@ -0,0 +1,109 @@ +--- +title: FAQs +sidebar_label: FAQs +--- + +### Why Zephyr™? + +As a best-in-class RTOS, Zephyr™ brings many [benefits](https://www.zephyrproject.org/benefits) to ZMK, such as: + +- A _single_ platform [supporting](https://docs.zephyrproject.org/latest/boards) many architectures, processors and boards. +- Optimization for low-powered, small memory footprint devices. +- Powerful hardware abstraction and configuration using [DeviceTree](https://docs.zephyrproject.org/latest/guides/dts/index.html) and [Kconfig](https://docs.zephyrproject.org/latest/guides/kconfig/index.html). +- A BLE stack that periodically obtains [qualification](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-qual.html) listings, making it easier for final products to obtain qualification from the Bluetooth® SIG. +- Multi-processor support, which is critical for power efficiency in upcoming MCUs. +- Permissive licencing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0). +- A buzzing developer [community](https://github.com/zephyrproject-rtos/zephyr) including many leading [embedded technology](https://www.zephyrproject.org/project-members) companies. +- Long term support (LTS) with security updates. + +### Why yet another keyboard firmware? + +That’s an excellent question! There are already great keyboard firmwares available, but ZMK has some advantages: + +- Zephyr™ + - See [Why Zephyr™?](#why-zephyr) +- Licensing + - Just like other open source firmware, ZMK is all about the free and the sharing. However, some other projects use the GPL licence which prevents integration of libraries and drivers whose licenses are not GPL-compatible (such as some embedded BLE drivers). ZMK uses the permissive [MIT](https://github.com/zmkfirmware/zmk/blob/main/LICENSE) license which doesn’t have this limitation. +- Wireless First + - ZMK is designed for the future, and we believe the future is wireless. So power efficiency plays a critical role in every design decision, just like in Zephyr™. + +The ZMK contributors firmly believe that a keyboard firmware built on Zephyr™ will provide more long term benefits. + +### What license does ZMK use? + +ZMK uses the MIT [license](https://github.com/zmkfirmware/zmk/blob/main/LICENSE). + +### What hardware/platforms does ZMK support? + +ZMK has the potential to run on any platform supported by Zephyr™. However, it’s impractical for the ZMK contributors to test all possible hardware. + +The Zephyr™ [documentation](https://docs.zephyrproject.org/latest/boards/index.html) describes which hardware is currently natively supported by the Zephyr™ platform. _Similar documentation covering which keyboards have been integrated into ZMK is currently being planned._ + +### Does ZMK compile for AVR? + +Sorry, Zephyr™ only supports 32-bit and 64-bit platforms. + +### How do I get started? + +ZMK is still in its infancy, so there’s a learning curve involved. But if you’d like to try it out, please check out the development [documentation](/docs) and the other FAQs. Please keep in mind that the project team is still small, so our support capability is limited whilst we focus on development. But we’ll try our best! Interested developers are also very welcome to contribute! + +### What is a “board”? + +In ZMK, a _board_ defines the _PCB_ that _includes the MCU_. +For keyboards, this is one of two options: + +- Complete keyboard PCBs that include the MCU (e.g. the Planck or Preonic). +- Small MCU boards (e.g. the Proton-C or nice!nano) that expose pins and are designed to be combined with larger keyboard PCBs, or hand wired to switches to create the final keyboard. + +### What is a “shield”? + +In ZMK, a _shield_ is a _PCB_ or _hardwired set of components_ that when combined with a MCU only [board](#what-is-a-board) like the Proton-C or nice!nano, results in a complete usable keyboard. Examples would be keyboard PCBs like the Kyria or Corne. The _shield_ is usually the big PCB containing all the keys. + +### Why _boards_ and _shields_? Why not just “keyboard”? + +If you haven't already done so, please read these FAQs first: + +- [What is a “board”?](#what-is-a-board) +- [What is a "shield"?](#what-is-a-shield) + +When a keyboard accepts a small “PCB MCU module” (e.g. _Arduino Pro Micro_) for its “brains”, then it's important to conceptually separate the hardware into a [board](#what-is-a-board) PCB and a [shield](#what-is-a-shield) PCB. + +The [shield](#what-is-a-shield) is a brainless shell containing all the keys, RGB LEDs, encoders etc. It maps all of these features to a standard pin footprint, such as the Pro Micro pinout. + +To bring this brainless [shield](#what-is-a-shield) to life, you attach any MCU [board](#what-is-a-board) matching the footprint. For instance, the _nice!nano_ is _pin-compatible_ with the _Arduino Pro Micro_, so you can substitute either [board](#what-is-a-board) onto the [shield](#what-is-a-shield). But each [board](#what-is-a-board) comes with its own features (MCU, flash, BLE, etc.) which must also be handled. + +Therefore in ZMK, [board](#what-is-a-board) and [shield](#what-is-a-shield) are considered two different (but related) entities so that it’s easier to mix and match them. They are combined during a ZMK build. + +Please note, many keyboards only have a single PCB which includes the “brains” (MCU) onboard. In ZMK, these have no [shield](#what-is-a-shield), only a [board](#what-is-a-board). + +### What bootloader does ZMK use? + +ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmkfirmware.dev/community/discord/invite)! + +### Can I contribute? + +Of course! Please use the developer [documentation](/docs) to get started! + +### I have an idea! What should I do? + +Please join us on [Discord](https://zmkfirmware.dev/community/discord/invite) and discuss it with us! + +### I want to add a new keyboard! What should I do? + +The exact process for the management of all the possible hardware is still being finalized, but any developer looking to contribute new keyboard definitions should chat with us on [Discord](https://zmkfirmware.dev/community/discord/invite) to get started. + +### Does ZMK have a Code of Conduct? + +Yes, it does have a [Code of Conduct](https://github.com/zmkfirmware/zmk/blob/main/CODE_OF_CONDUCT.md)! Please give it a read! + +### What does “ZMK” mean? + +ZMK was originally coined as a quasi-acronym of “Zephyr Mechanical Keyboard” and also taking inspiration from the amazing keyboard firmware projects, TMK and QMK. + +### Is ZMK related to TMK or QMK? + +No. But inspired by, of course! + +### Who created ZMK? + +ZMK was created by Pete Johanson. It is developed and maintained by the open source community. diff --git a/zmk/docs/docs/feature/displays.md b/zmk/docs/docs/feature/displays.md new file mode 100644 index 00000000..2b3d001d --- /dev/null +++ b/zmk/docs/docs/feature/displays.md @@ -0,0 +1,6 @@ +--- +title: OLED Displays +sidebar_label: OLED Displays +--- + +TODO: Documentation on OLED displays. diff --git a/zmk/docs/docs/feature/encoders.md b/zmk/docs/docs/feature/encoders.md new file mode 100644 index 00000000..b78f89e3 --- /dev/null +++ b/zmk/docs/docs/feature/encoders.md @@ -0,0 +1,44 @@ +--- +title: Encoders +sidebar_label: Encoders +--- + +Existing support for encoders in ZMK is focused around the five pin EC11 rotary encoder with push button design used in the majority of current keyboard and macropad designs. + +## Enabling EC11 Encoders + +To enable encoders for boards that have existing encoder support, uncomment the `EC11_CONFIG=y` and `CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y` lines in your board's .conf file in your `zmk-config/config` folder. Save and push your changes, then download and flash the new firmware. + +## Customizing EC11 Encoder Behavior + +Encoder behavior in ZMK is configured in two different locations as the push button and rotation behaviors are handled in two separate ways. + +### Push Button + +Keyboards and macropads with encoder support will typically take the two EC11 pins responsible for the push button and include them as part of the matrix for the keys. To configure what is sent by the push button, find the encoder's position in the keyboard matrix and assign it a behavior the same as you would any other key. + +### Rotation + +Rotation is handled separately as a type of sensor. The behavior for this is set in `sensor-bindings`, which is defined in each keymap layer in the following format: + +``` +sensor-bindings = ; +``` + +- `BINDING`, for now, has only one behavior available; `&inc_dec_kp` for key presses (see [Key Press](/docs/behavior/key-press) for details on available keycodes). +- `CW_KEY` is the keycode activated by a clockwise turn. +- `CCW_KEY` is the keycode activated by a counter-clockwise turn. + +Additional encoders can be configured by adding more `BINDING CW_KEY CCW_KEY` sets immediately after the first. + +As an example, a complete `sensor-bindings` for a Kyria with two encoders could look like: + +``` +sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; +``` + +Here, the left encoder is configured to control volume up and down while the right encoder sends either Page Up or Page Down. + +## Adding Encoder Support + +See the [New Keyboard Shield](/docs/dev-guide-new-shield#encoders) documentation for how to add or modify additional encoders to your shield. diff --git a/zmk/docs/docs/feature/keymaps.md b/zmk/docs/docs/feature/keymaps.md new file mode 100644 index 00000000..c4c16c3b --- /dev/null +++ b/zmk/docs/docs/feature/keymaps.md @@ -0,0 +1,182 @@ +--- +title: Keymaps & Behaviors +sidebar_label: Keymaps +--- + +ZMK uses a declarative approach to keymaps instead of using C code for all keymap configuration. +Right now, ZMK uses the devicetree syntax to declare those keymaps; future work is envisioned for +supporting dynamic loading of declarative keymaps, e.g. over USB Mass Storage or via a custom BLE +service. + +:::note +For advanced users looking to implement custom behaviors for their keymaps, this will be possible +in the future by allowing user configs to add to the CMake application built by Zephyr. +::: + +## Big Picture + +All keyboard definitions (complete boards or shields) include the _default_ keymap for that keyboard, +so ZMK can produce a "stock" firmware for that keyboard without any further modifications. For users +looking to customize their keyboard's behavior, they can copy the stock `.keymap` file into their +user config directory, and customize the keymap to their liking. + +## Behaviors + +ZMK implements the concept of "behaviors", which can be bound to a certain key position, sensor (encoder), +or layer, to perform certain actions when events occur for that binding (e.g. when a certain key position +is pressed or released, or an encoder triggers a rotation event). + +For example, the simplest behavior in ZMK is the "key press" behavior, which responds to key position +(a certain spot on the keyboard), and when that position is pressed, send a keycode to the host, and +when the key position is released, updates the host to notify of the keycode being released. + +For the full set of possible behaviors, start at the [Key Press](/docs/behavior/key-press) behavior. + +## Layers + +Like many mechanical keyboard firmwares, ZMK keymaps are composed of a collection of layers, with a +minimum of at least one layer that is the default, usually near the bottom of the "stack". Each layer +in ZMK contains a set of bindings that bind a certain behavior to a certain key position in that layer. + +| ![Diagram of three layers](../assets/features/keymaps/layer-diagram.png) | +| :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| _A simplified diagram showing three layers. The layout of each layer is the same (they all contain four keys), but the behavior bindings within each layer can be different._ | + +In addition to the base default layer (which can be changed), certain bound behaviors may also +enable/disable additional layers "on top" of the default layer. + +When a key location is pressed/released, the stack of all active layers from "top to bottom" is used, +and the event is sent to the behavior bound at that position in each layer, for it to perform whatever +actions it wants to in reaction to the event. Those behaviors can choose to "handle" the event, and stop +it from being passed to any lower layers, or may choose to "pass it along", and let the next layer +in the stack _also_ get the event. + +## Behavior Bindings + +Binding a behavior at a certain key position may include up to two extra parameters that are used to +alter the behavior when that specific key position is activated/deactivated. For example, when binding +the "key press" (`kp`) behavior at a certain key position, you must specific _which_ keycode should +be used for that key position. + +``` +&kp A +``` + +In this case, the `A` is actually a define for the raw HID keycode, to make keymaps easier to read and write. + +For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound: + +``` +&mt LSHFT D +``` + +Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second +parameter is the keycode that should be sent when triggering the "tap" behavior. + +## Keymap File + +A keymap file is composed of several sections, that together make up a valid devicetree file for describing the keymap and its layers. + +### Includes + +The devicetree files are actually preprocessed before being finally leveraged by Zephyr. This allows using standard C defines to create meaningful placeholders +for what would otherwise be cryptic integer keycodes, etc. This also allows bringing in _other_ devicetree nodes from separate files. + +The top two lines of most keymaps should include: + +``` +#include +#include +``` + +The first defines the nodes for all the available behaviors in ZMK, which will be referenced in the behavior bindings. This is how bindings like `&kp` can reference the key press behavior defined with an anchor name of `kp`. + +The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHFT`) used for various behavior bindings. + +### Root devicetree Node + +ALl the remaining keymap nodes will be nested inside of the root devicetree node, like so: + +```devicetree +/ { + // Everything else goes here! +}; +``` + +### Keymap Node + +Nested under the devicetree root, is the keymap node. The node _name_ itself is not critical, but the node **MUST** have a property +`compatible = "zmk,keymap"` in order to be used by ZMK. + +``` + keymap { + compatible = "zmk,keymap"; + + // Layer nodes go here! + }; +``` + +### Layers + +Each layer of your keymap will be nested under the keymap node. Here is a sample +that defines just one layer for this keymap: + +``` + keymap { + compatible = "zmk,keymap"; + + default_layer { +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | +// | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +``` + +Each layer should have: + +1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard. +1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way) + +For the full set of possible behaviors, start at the [Key Press](/docs/behavior/key-press) behavior. + +### Complete Example + +Putting this all together, a complete [`kyria.keymap`](https://github.com/zmkfirmware/zmk/blob/main/app/boards/shields/kyria/kyria.keymap) looks like: + +``` +#include +#include + +/ { + keymap { + compatible = "zmk,keymap"; + + default_layer { +// -------------------------------------------------------------------------------------------------------------------------------------------------------------------- +// | ESC | Q | W | E | R | T | | Y | U | I | O | P | \ | +// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | +// | SHIFT | Z | X | C | V | B | CTRL+A | CTRL+C | | CTRL+V | CTRL+X | N | M | , | . | / | R CTRL | +// | GUI | DEL | RETURN | SPACE | ESCAPE | | RETURN | SPACE | TAB | BSPC | R ALT | + bindings = < + &kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH + &kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE + &kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL + &kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT + >; + + sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; + }; + }; +}; +``` diff --git a/zmk/docs/docs/feature/underglow.md b/zmk/docs/docs/feature/underglow.md new file mode 100644 index 00000000..2cea913f --- /dev/null +++ b/zmk/docs/docs/feature/underglow.md @@ -0,0 +1,131 @@ +--- +title: RGB Underglow +sidebar_label: RGB Underglow +--- + +RGB underglow is a feature used to control "strips" of RGB LEDs. Most of the time this is called underglow and creates a glow underneath the board using a ring of LEDs around the edge, hence the name. However, this can be extended to be used to control anything from a single LED to a long string of LEDs anywhere on the keyboard. + +ZMK supports all the RGB LEDs supported by Zephyr. Here's the current list supported: + +- WS2812-ish (WS2812B, WS2813, SK6812, or compatible) +- APA102 +- LPD880x (LPD8803, LPD8806, or compatible) + +Of the compatible types, the WS2812 LED family is by far the most popular type. Currently each of these types of LEDs are expected to be run using SPI with a couple of exceptions. + +Here you can see the RGB underglow feature in action using WS2812 LEDs. + +
+ +
+ +## Enabling RGB Underglow + +To enable RGB underglow on your board or shield, simply enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your user config directory as such: + +``` +CONFIG_ZMK_RGB_UNDERGLOW=y +# Use the STRIP config specific to the LEDs you're using +CONFIG_WS2812_STRIP=y +``` + +If your board or shield does not have RGB underglow configured, refer to [Adding RGB Underglow to a Board](#adding-rgb-underglow-to-a-board). + +## Configuring RGB Underglow + +There are various Kconfig options used to configure the RGB underglow feature. These can all be set in the `.conf` file. + +| Option | Description | Default | +| ------------------------------------ | ---------------------------------------------- | ------- | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_STEP` | Hue step in degrees of 360 used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_STEP` | Saturation step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP` | Brightness step in percent used by RGB actions | 10 | +| `CONFIG_ZMK_RGB_UNDERGLOW_HUE_START` | Default hue 0-359 in degrees | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SAT_START` | Default saturation 0-100 in percent | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_BRT_START` | Default brightness 0-100 in percent | 100 | +| `CONFIG_ZMK_RGB_UNDERGLOW_SPD_START` | Default effect speed 1-5 | 3 | +| `CONFIG_ZMK_RGB_UNDERGLOW_EFF_START` | Default effect integer from the effect enum | 0 | +| `CONFIG_ZMK_RGB_UNDERGLOW_ON_START` | Default on state | y | + +## Adding RGB Underglow to a Board + +RGB underglow is always added to a board, not a shield. This is a consequence of needing to configure SPI to control the LEDs. +If you have a shield with RGB underglow, you must add a `boards/` directory within your shield folder to define the RGB underglow individually for each board that supports the shield. +Inside the `boards/` folder, you define a `.overlay` for each different board. +For example, the Kyria shield has a `boards/nice_nano.overlay` file that defines the RGB underglow for the `nice_nano` board specifically. + +The first step to adding support for underglow is to select you SPI output. With nRF52 boards, you can just use `&spi1` and define the pins you want to use. +For other boards, you must select an SPI definition that has the `MOSI` pin as your data pin going to your LED strip. + +Here's an example of an nRF52 SPI definition: + +``` +&spi1 { + compatible = "nordic,nrf-spim"; + status = "okay"; + mosi-pin = <6>; + // Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. + sck-pin = <5>; + miso-pin = <7>; + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; /* ignored, but necessary for SPI bindings */ + spi-max-frequency = <4000000>; + + /* WS2812 */ + chain-length = <10>; /* number of LEDs */ + spi-one-frame = <0x70>; + spi-zero-frame = <0x40>; + }; +}; +``` + +:::info + +If you are configuring SPI for an nRF52840 (or other nRF52) based board, double check that you are using pins that aren't restricted to low frequency I/O. +Ignoring these restrictions may result in poor wireless performance. You can find the list of low frequency I/O pins [here](https://infocenter.nordicsemi.com/index.jsp?topic=%2Fps_nrf52840%2Fpin.html&cp=4_0_0_6_0). + +::: + +Here's another example for a non-nRF52 board on `spi1`: + +``` +&spi1 { + + led_strip: ws2812@0 { + compatible = "worldsemi,ws2812-spi"; + label = "WS2812"; + + /* SPI */ + reg = <0>; + spi-max-frequency = <5250000>; + + /* WS2812 */ + chain-length = <10>; /* number of LEDs */ + spi-one-frame = <0x70>; /* make sure to configure this properly for your SOC */ + spi-zero-frame = <0x40>; /* make sure to configure this properly for your SOC */ + }; +}; +``` + +Once you have your `led_strip` properly defined you need to add it to the root devicetree node `chosen` element: + +``` +/ { + chosen { + zmk,underglow = &led_strip; + }; +}; +``` + +Finally you need to enable the `CONFIG_ZMK_RGB_UNDERGLOW` and `X_STRIP` configuration values in the `.conf` file of your board (or set a default in the `Kconfig.defconfig`): + +``` +CONFIG_ZMK_RGB_UNDERGLOW=y +# Use the STRIP config specific to the LEDs you're using +CONFIG_WS2812_STRIP=y +``` diff --git a/zmk/docs/docs/hardware.md b/zmk/docs/docs/hardware.md new file mode 100644 index 00000000..b142bda0 --- /dev/null +++ b/zmk/docs/docs/hardware.md @@ -0,0 +1,48 @@ +--- +title: Supported Hardware +sidebar_label: Supported Hardware +--- + +:::warning + +ZMK Firmware is still an early stage project. Many features are still waiting to be implemented, and only a select few keyboards +have had their hardware details codified in boards/shields for ZMK. + +::: + +With the solid technical foundation of Zephyr™ RTOS, ZMK can support a wide diversity of hardware targets. +That being said, there are currently only a few specific [boards](/docs/faq#what-is-a-board)/[shields](/docs/faq#what-is-a-shield) that have been written and tested by the ZMK contributors. + +## Boards + +- [nice!nano](https://nicekeyboards.com/products/nice-nano-v1-0) (`nice_nano`) +- [nrfMicro](https://github.com/joric/nrfmicro) (`nrfmicro_13`, `nrfmicro_11`, `nrfmicro_11_flipped`) +- [BlueMicro840](https://store.jpconstantineau.com/#/group/bluemicro) (`bluemicro840_v1`) +- [QMK Proton-C](https://qmk.fm/proton-c/) (`proton_c`) + +## Keyboard Shields + +- [Kyria](https://splitkb.com/products/kyria-pcb-kit) (`kyria_left` and `kyria_right`) +- [Corne](https://github.com/foostan/crkbd) (`corne_left` and `corne_right`) +- [Lily58](https://github.com/kata0510/Lily58) (`lily58_left` and `lily58_right`) +- [Sofle](https://github.com/josefadamcik/SofleKeyboard) (`sofle_left` and `sofle_right`) +- [Splitreus62](https://github.com/Na-Cly/splitreus62) (`splitreus62_left` and `splitreus62_right`) +- [Reviung41](https://github.com/gtips/reviung/tree/master/reviung41) (`reviung41`) +- [RoMac+ v4](https://www.littlekeyboards.com/products/romac) (`romac_plus`) +- [RoMac v2](https://mechboards.co.uk/shop/kits/romac-macro-pad/) (`romac`) +- [Boardsource 3x4 Macro](https://boardsource.xyz/store/5ecc2008eee64242946c98c1) (`boardsource3x4`) +- [QAZ](https://www.cbkbd.com/product/qaz-keyboard-kit) (`qaz`) + +## Other Hardware + +In addition to the basic keyboard functionality, there is some initial support for additional keyboard hardware: + +- Encoders +- OLEDs +- RGB Underglow + +Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmkfirmware.dev/community/discord/invite). + +## Contributing + +If you'd like to add support for a new keyboard shield, head over to the [New Keyboard Shield](/docs/dev-guide-new-shield) documentation. diff --git a/zmk/docs/docs/intro.md b/zmk/docs/docs/intro.md new file mode 100644 index 00000000..c76e4b7c --- /dev/null +++ b/zmk/docs/docs/intro.md @@ -0,0 +1,48 @@ +--- +title: Introduction to ZMK +sidebar_label: Introduction +slug: / +--- + +ZMK Firmware is an open source (MIT) keyboard +firmware built on the [Zephyr™ Project](https://zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues. + +## Features + +ZMK is currently missing some features found in other popular firmware. This table compares the features supported by ZMK, BlueMicro and QMK: + +| **Feature** | ZMK | BlueMicro | QMK | +| ---------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: | +| Low Latency BLE Support | ✅ | ✅ | | +| Multi-Device BLE Support | ✅ | | | +| [USB Connectivity](behavior/outputs) | ✅ | | ✅ | +| User Configuration Repositories | ✅ | | | +| Split Keyboard Support | ✅ | ✅ | ✅ | +| [Keymaps and Layers](behavior/layers) | ✅ | ✅ | ✅ | +| [Hold-Tap](behavior/hold-tap) (which includes [Mod-Tap](behavior/mod-tap) and [Layer-Tap](behavior/layers/#layer-tap)) | ✅ | ✅ | ✅ | +| [Keyboard Codes](codes/#keyboard) | ✅ | ✅ | ✅ | +| [Media](codes/#media-controls) & [Consumer](codes/#consumer-controls) Codes | ✅ | ✅ | ✅ | +| [Encoders](feature/encoders)[^1] | ✅ | | ✅ | +| [OLED Display Support](feature/displays)[^2] | 🚧 | 🚧 | ✅ | +| [RGB Underglow](feature/underglow) | ✅ | ✅ | ✅ | +| One Shot Keys | 🚧 | ✅ | ✅ | +| Combo Keys | 🚧 | | ✅ | +| Macros | 🚧 | ✅ | ✅ | +| Mouse Keys | | ✅ | ✅ | +| Low Active Power Usage | ✅ | | | +| [Low Power Sleep States](https://github.com/zmkfirmware/zmk/pull/211) | 🚧 | ✅ | | +| [Low Power Mode (VCC Shutoff)](https://github.com/zmkfirmware/zmk/pull/242) | 🚧 | | | +| [Battery Reporting](https://github.com/zmkfirmware/zmk/issues/47) | 🚧 | ✅ | | +| Shell over BLE | | | | +| Realtime Keymap Updating | 💡 | | ✅ | +| AVR/8 Bit | | | ✅ | +| [Wide Range of ARM Chips Supported](https://docs.zephyrproject.org/latest/boards/index.html) | ✅ | | | + +[^2]: Encoders are not currently supported on peripheral side splits. +[^1]: OLEDs are currently proof of concept in ZMK. + +## Code Of Conduct + +Please note that this project is released with a +[Contributor Code of Conduct](https://www.contributor-covenant.org/version/2/0/code_of_conduct/). +By participating in this project you agree to abide by its terms. diff --git a/zmk/docs/docs/troubleshooting.md b/zmk/docs/docs/troubleshooting.md new file mode 100644 index 00000000..f11d02e4 --- /dev/null +++ b/zmk/docs/docs/troubleshooting.md @@ -0,0 +1,90 @@ +--- +title: Troubleshooting +sidebar_title: Troubleshooting +--- + +### Summary + +The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmkfirmware.dev/community/discord/invite). + +### File Transfer Error + +Variations of the warnings shown below occur when flashing the `.uf2` onto the microcontroller. This is because the microcontroller resets itself before the OS receives confirmation that the file transfer is complete. Errors like this are normal and can generally be ignored. Verification of a functional board can be done by attempting to pair your newly flashed keyboard to your computer via Bluetooth or plugging in a USB cable if `ZMK_USB` is enabled in your Kconfig.defconfig. + +| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/windows.png) | +| :------------------------------------------------------------------------------: | +| An example of the file transfer error on Windows 10 | + +| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/linux.png) | +| :----------------------------------------------------------------------------: | +| An example of the file transfer error on Linux | + +| ![Example Error Screen](../docs/assets/troubleshooting/filetransfer/mac.png) | +| :--------------------------------------------------------------------------: | +| An example of the file transfer error on MacOS | + +### CMake Error + +``` +CMake Warning at C:/zmk/zephyr/subsys/usb/CMakeLists.txt:28 (message): + CONFIG_USB_DEVICE_VID has default value 0x2FE3. + + This value is only for testing and MUST be configured for USB products. + + +CMake Warning at C:/zmk/zephyr/subsys/usb/CMakeLists.txt:34 (message): + CONFIG_USB_DEVICE_PID has default value 0x100. + + This value is only for testing and MUST be configured for USB products. +``` + +CMake Warnings shown above during `west build` are normal occurrences. They should not negatively affect the firmware's ability to function as normal. + +On the other hand, an error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined. +For more information, click [here](../docs/dev-setup#environment-variables). + +### dtlib.DTError + +An error along the lines of `dtlib.DTError: .dts.pre.tmp:` during firmware compilation indicates an issue within the `.keymap` file. +This can be verified by checking the file in question, found in `mkdir/app/build`. + +| ![Example Error Screen](../docs/assets/troubleshooting/keymaps/errorscreen.png) | +| :----------------------------------------------------------------------------------------------------------------: | +| An example of the dtlib.DTError when compiling an iris with the nice!nano while the keymap is not properly defined | + +After opening the `.dts.pre.tmp:` and scrolling down to the referenced line, one can locate errors within their shield's keymap by checking if the referenced keycodes were properly converted into the correct [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12). + +| ![Unhealthy Keymap Temp](../docs/assets/troubleshooting/keymaps/unhealthyEDIT.png) | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| An incorrectly defined keymap unable to compile. As shown in red, `&kp SPAC` is not a valid reference to the [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12) used for "Keyboard Spacebar" | + +| ![Healthy Keymap Temp](../docs/assets/troubleshooting/keymaps/healthyEDIT.png) | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | +| A properly defined keymap with successful compilation. As shown in red, the corrected keycode (`&kp SPACE`) references the proper Usage ID defined in the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12) | + +### Split Keyboard Halves Unable to Pair + +Previously, pairing split keyboard halves involved a **BLE Reset** via a combination of held keys that removed all bluetooth profile information from the keyboard. +Since then, a much simpler procedure of performing a bluetooth reset for split keyboards has come about, without the need for any file modification: + +**New Procedure:** + +1. Log into Github and download the "settings clear" UF2 image from the [latest build in Github Actions](https://github.com/zmkfirmware/zmk/actions?query=workflow%3ABuild+branch%3Amain) +1. Put each half of the split keyboard into bootloader mode +1. Flash one of the halves of the split with the "settings clear" UF2 image from step 1. Immediately after flashing "settings clear" to the chosen half, immediately put it into bootloader mode + to avoid accidental bonding between the halves. +1. Repeat step 3 with the other half of the split keyboard +1. Flash the actual image for each half of the split keyboard (e.g `my_board_left.uf2` to the left half, `my_board_right.uf2` to the right half) + +After completing these steps, pair the halves of the split keyboard together by resetting them at the same time. Most commonly, this is done by grounding the reset pins +for each of your keyboard's microcontrollers or pressing the reset buttons at the same time. + +### Connectivity Issues + +Some users may experience a poor connection between the keyboard and the host. This might be due to poor quality BLE hardware, a metal enclosure on the keyboard or host, or the distance between them. Increasing the transmit power of the keyboard's BLE radio may reduce the severity of this problem. To do this, set the `CONFIG_BT_CTLR_TX_PWR_PLUS_8` configuration value in the `.conf` file of your user config directory as such: + +``` +CONFIG_BT_CTLR_TX_PWR_PLUS_8=y +``` + +For the `nRF52840`, the value `PLUS_8` can be set to any multiple of four between `MINUS_20` and `PLUS_8`. The default value for this config is `0`, but if you are having connection issues it is recommended to set it to `PLUS_8` because the power consumption difference is negligible. For more information on changing the transmit power of your BLE device, please refer to [the Zephyr docs.](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_BT_CTLR_TX_PWR_PLUS_8.html) diff --git a/zmk/docs/docs/user-setup.md b/zmk/docs/docs/user-setup.md new file mode 100644 index 00000000..703e118a --- /dev/null +++ b/zmk/docs/docs/user-setup.md @@ -0,0 +1,200 @@ +--- +title: Installing ZMK +sidebar_label: Installing ZMK +--- + +import Tabs from '@theme/Tabs'; +import TabItem from '@theme/TabItem'; + +Unlike other keyboard firmwares, ZMK Firmware has been built from the ground up to allow users to manage +their own keyboard configurations, including keymaps, specific hardware details, etc. all outside of the +core ZMK Firmware source repository. + +In addition to this, most users will not need to install any complicated toolchains or tools to build ZMK. GitHub Actions is used instead to automatically build the user's configured firmware for them. + +## Summary + +The following steps can be taken to obtain an installable firmware image for your device, without the need +to install any compiler or specialized toolchain. This is possible by leveraging [GitHub Actions](https://github.com/features/actions) +to build your firmware for you in the cloud, which you can then download and flash to your device. + +Following the steps in this guide, you will: + +1. Create a new repository in GitHub that will contain your user config. +1. Download and run a small shell script that will automate most of the setup. The script will: + 1. Prompt you for which board (e.g. nice!nano) and shield (e.g. Lily58 or Kyria) you want to create a configuration for. + 1. Prompt you for your GitHub username and repo where the config should be pushed. + 1. Use `git` to clone a template repository that will be the basis for your user's config repository. + 1. Use the given board and shield to update the included GitHub Action to build for the correct hardware. + 1. Commit the initial version. + 1. (If info was provided) Push the local repo to your GitHub repository. +1. Add your own keymap overlay (`keymap.overlay`) file to the repository, and change your keymap. +1. Update the configuration flags for your user config, to enable/disable any ZMK features you would like to include. +1. Commit and push the updates to trigger a new GitHub Action run. + +## Prerequisites + +The remainder of this guide assumes the following prerequisites: + +1. You have an active, working [GitHub](https://github.com/) account. +1. You have installed and configured the [`git`](https://git-scm.com/) version control tool. +1. You have locally configured git to access your github account. If using [personal access tokens](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token), please be sure it was created with the "workflow" scope option selected. + +:::note +If you need to, a quick read of [Learn The Basics Of Git In Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/) will help you get started. +::: + +## GitHub Repo + +Before running the setup script, you will first need to create a new GitHub repository to host the config. + +1. Navigate to [https://github.com/new](https://github.com/new) +1. When prompted for the repo name, enter `zmk-config`. +1. The repository can be public or private +1. Do **not** check any of the options to initialize the repository with a README or other files. +1. Click "Create repository" + +## User Config Setup Script + +To start the setup process, run the following from your command line prompt: + + + + +``` +bash -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)" +``` + + + + +``` +bash -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" '' --wget +``` + + + + +``` +iex ((New-Object System.Net.WebClient).DownloadString('https://zmkfirmware.dev/setup.ps1'))" +``` + + + + +### MCU Board Selection + +When prompted, enter the number for the corresponding MCU board you would like to target: + +``` +MCU Board Selection: +1) nice!nano +2) QMK Proton-C +3) Quit +Pick an MCU board: +``` + +### Keyboard Shield Selection + +:::note +If you are building firmware for a new keyboard shield that is not included in the built-in +list of shields, you can choose any shield from the list that is similar to yours to generate the repository, +and edit / add necessary files according to the [guide for adding new keyboard shield](./dev-guide-new-shield.md). +::: + +When prompted, enter the number for the corresponding keyboard shield you would like to target: + +``` +Keyboard Shield Selection: +1) Kyria +2) Lily58 +3) Quit +Pick an keyboard: +``` + +### Keymap Customization + +At the next prompt, you have an opportunity to decide if you want the stock keymap file copied in +for further customization: + +``` +Copy in the stock keymap for customization? [Yn]: +``` + +Hit `Enter` or type `yes`/`y` to accept this. If you want to keep the stock keymap, or write a keymap +from scratch, type in `no`/`n`. + +### GitHub Details + +In order to have your new configuration automatically pushed, and then built using GitHub Actions, enter +some information about your particular GitHub info: + +``` +GitHub Username (leave empty to skip GitHub repo creation): petejohanson +GitHub Repo Name: zmk-config +GitHub Repo: https://github.com/petejohanson/zmk-config.git +``` + +Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit `Enter`. + +### Confirming Selections + +The setup script will confirm all of your selections one last time, before performing the setup: + +``` +Preparing a user config for: +* MCU Board: nice_nano +* Shield: kyria +* GitHub Repo To Push (please create this in GH first!): https://github.com/petejohanson/zmk-config.git + +Continue? [Yn]: +``` + +After hitting `Enter` or typing `y`, the script will create an initial config in a directory named after the repo name, +update the GitHub Action YAML file, commit the initial version, and then push to your repo. + +:::info + +If you used the default GitHub repo URL using the `https://` scheme, you may be prompted for your username + password in order to +push the initial commit. + +::: + +## Installing The Firmware + +### Download The Archive + +Once the setup script is complete and the new user config repository has been pushed, GitHub will automatically run the action +to build your keyboard firmware files. You can view the actions by clicking on the "Actions" tab on your GitHub repository. + +![](./assets/user-setup/github-actions-link.png) + +Once you have loaded the Actions tab, select the top build from the list. Once you load it, the right side panel will include +a link to download the `firmware` upload: + +![](./assets/user-setup/firmware-archive.png) + +Once downloaded, extract the zip and you can verify it should contain one or more `uf2` files, which will be copied to +your keyboard. + +### Flashing UF2 Files + +To flash the firmware, first put your board into bootloader mode by double clicking the reset button (either on the MCU board itself, +or the one that is part of your keyboard). The controller should appear in your OS as a new USB storage device. + +Once this happens, copy the correct UF2 file (e.g. left or right if working on a split), and paste it onto the root of that USB mass +storage device. Once the flash is complete, the controller should automatically restart, and load your newfly flashed firmware. + +## Wirelessly Connecting Your Keyboard + +Connecting your keyboard wirelessly is the same as adding other Bluetooth devides: press the reset button and scan for devices. However, pairing and bonding is still currently being worked on to increase relability and ease of use. In addition, users have in general reported that Bluetooth pairing with computers tends to be quite finnicky. Try out the connection with your tablet or phone first, as those devices seem to work much more consistently. + +### Connecting Split Keyboard Halves + +For split keyboards, after flashing each half individually you can connect them together by resetting them at the same time. Within a few seconds of resetting, both halves should automatically connect to each other. diff --git a/zmk/docs/docusaurus.config.js b/zmk/docs/docusaurus.config.js new file mode 100644 index 00000000..97548342 --- /dev/null +++ b/zmk/docs/docusaurus.config.js @@ -0,0 +1,123 @@ +module.exports = { + title: "ZMK Firmware", + tagline: "Modern, open source keyboard firmware", + url: "https://zmkfirmware.dev", + baseUrl: "/", + favicon: "img/favicon.ico", + organizationName: "zmkfirmware", // Usually your GitHub org/user name. + projectName: "zmk", // Usually your repo name. + themeConfig: { + googleAnalytics: { + trackingID: "UA-145201102-2", + anonymizeIP: true, + }, + // sidebarCollapsible: false, + navbar: { + title: "ZMK Firmware", + logo: { + alt: "ZMK Logo", + src: "img/zmk_logo.svg", + }, + items: [ + { + to: "docs/", + activeBasePath: "docs", + label: "Docs", + position: "left", + }, + { to: "blog", label: "Blog", position: "left" }, + { + href: "https://github.com/zmkfirmware/zmk", + label: "GitHub", + position: "right", + }, + ], + }, + footer: { + style: "dark", + links: [ + { + title: "Docs", + items: [ + { + label: "Getting Started", + to: "docs/", + }, + { + label: "Development", + to: "docs/dev-setup/", + }, + ], + }, + { + title: "Community", + items: [ + // { + // label: "Stack Overflow", + // href: "https://stackoverflow.com/questions/tagged/docusaurus", + // }, + { + label: "Discord", + href: + (process.env.URL || "https://zmkfirmware.dev") + + "/community/discord/invite", + }, + { + label: "Twitter", + href: "https://twitter.com/ZMKFirmware", + }, + ], + }, + { + title: "More", + items: [ + { + label: "Blog", + to: "blog", + }, + { + label: "GitHub", + href: "https://github.com/zmkfirmware/zmk", + }, + { + html: ` + + Deploys by Netlify + + `, + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} ZMK Project Contributors. Creative Commons License`, + }, + algolia: { + apiKey: "75325855fc90356828fe212d38e5ca34", + indexName: "zmkfirmware", + }, + }, + presets: [ + [ + "@docusaurus/preset-classic", + { + docs: { + // It is recommended to set document id as docs home page (`docs/` path). + sidebarPath: require.resolve("./sidebars.js"), + // Please change this to your repo. + editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/", + }, + blog: { + showReadingTime: true, + // Please change this to your repo. + editUrl: "https://github.com/zmkfirmware/zmk/edit/main/docs/", + }, + theme: { + customCss: [ + require.resolve("./src/css/custom.css"), + require.resolve("./src/css/codes.css"), + ], + }, + }, + ], + ], +}; diff --git a/zmk/docs/netlify.toml b/zmk/docs/netlify.toml new file mode 100644 index 00000000..8ef5addf --- /dev/null +++ b/zmk/docs/netlify.toml @@ -0,0 +1,4 @@ +[[redirects]] + from = "/community/discord/invite" + to = "https://discord.gg/sycytVQ" + status = 302 \ No newline at end of file diff --git a/zmk/docs/package-lock.json b/zmk/docs/package-lock.json new file mode 100644 index 00000000..757beb04 --- /dev/null +++ b/zmk/docs/package-lock.json @@ -0,0 +1,31438 @@ +{ + "name": "docs", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "version": "0.0.0", + "dependencies": { + "@docusaurus/core": "^2.0.0-alpha.66", + "@docusaurus/preset-classic": "^2.0.0-alpha.66", + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/react-fontawesome": "^0.1.12", + "classnames": "^2.2.6", + "react": "^16.8.4", + "react-copy-to-clipboard": "^5.0.2", + "react-dom": "^16.8.4", + "react-toastify": "^6.0.9" + }, + "devDependencies": { + "eslint": "^7.12.0", + "eslint-config-prettier": "^6.14.0", + "eslint-plugin-mdx": "^1.8.2", + "eslint-plugin-react": "^7.21.5", + "prettier": "2.1.2" + } + }, + "node_modules/@algolia/cache-browser-local-storage": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", + "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", + "dependencies": { + "@algolia/cache-common": "4.5.1" + } + }, + "node_modules/@algolia/cache-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", + "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" + }, + "node_modules/@algolia/cache-in-memory": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", + "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", + "dependencies": { + "@algolia/cache-common": "4.5.1" + } + }, + "node_modules/@algolia/client-account": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", + "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", + "dependencies": { + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/@algolia/client-analytics": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", + "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", + "dependencies": { + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/@algolia/client-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", + "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", + "dependencies": { + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/@algolia/client-recommendation": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", + "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", + "dependencies": { + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/@algolia/client-search": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", + "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", + "dependencies": { + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/@algolia/logger-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", + "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" + }, + "node_modules/@algolia/logger-console": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", + "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", + "dependencies": { + "@algolia/logger-common": "4.5.1" + } + }, + "node_modules/@algolia/requester-browser-xhr": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", + "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", + "dependencies": { + "@algolia/requester-common": "4.5.1" + } + }, + "node_modules/@algolia/requester-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", + "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" + }, + "node_modules/@algolia/requester-node-http": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", + "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", + "dependencies": { + "@algolia/requester-common": "4.5.1" + } + }, + "node_modules/@algolia/transporter": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", + "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", + "dependencies": { + "@algolia/cache-common": "4.5.1", + "@algolia/logger-common": "4.5.1", + "@algolia/requester-common": "4.5.1" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "dependencies": { + "@babel/highlight": "7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + }, + "node_modules/@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "@babel/generator": "7.12.1", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helpers": "7.12.1", + "@babel/parser": "7.12.3", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1", + "convert-source-map": "1.7.0", + "debug": "4.2.0", + "gensync": "1.0.0-beta.1", + "json5": "2.1.3", + "lodash": "4.17.20", + "resolve": "1.17.0", + "semver": "5.7.1", + "source-map": "0.5.7" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "dependencies": { + "@babel/types": "7.12.1", + "jsesc": "2.5.2", + "source-map": "0.5.7" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "dependencies": { + "@babel/helper-explode-assignable-expression": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", + "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-module-imports": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "dependencies": { + "@babel/compat-data": "7.12.1", + "@babel/helper-validator-option": "7.12.1", + "browserslist": "4.14.5", + "semver": "5.7.1" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "dependencies": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-regex": "7.10.5", + "regexpu-core": "4.7.1" + } + }, + "node_modules/@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "dependencies": { + "@babel/helper-function-name": "7.10.4", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "dependencies": { + "@babel/helper-get-function-arity": "7.10.4", + "@babel/template": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "dependencies": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-simple-access": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/helper-validator-identifier": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "dependencies": { + "lodash": "4.17.20" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-wrap-function": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "dependencies": { + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "dependencies": { + "@babel/helper-function-name": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "dependencies": { + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dependencies": { + "@babel/helper-validator-identifier": "7.10.4", + "chalk": "2.4.2", + "js-tokens": "4.0.0" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-dynamic-import": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-export-namespace-from": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-json-strings": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-numeric-separator": "7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-transform-parameters": "7.12.1" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", + "@babel/plugin-syntax-optional-chaining": "7.8.3" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", + "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "dependencies": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-define-map": "7.10.5", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "globals": "11.12.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "dependencies": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "dependencies": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "dependencies": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-simple-access": "7.12.1", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "dependencies": { + "@babel/helper-hoist-variables": "7.10.4", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-identifier": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "dependencies": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-react-constant-elements": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", + "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-react-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", + "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", + "dependencies": { + "@babel/helper-builder-react-jsx": "7.10.4", + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-development": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", + "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", + "dependencies": { + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "dependencies": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "dependencies": { + "regenerator-transform": "0.14.5" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "dependencies": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "resolve": "1.17.0", + "semver": "5.7.1" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-regex": "7.10.5" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", + "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "dependencies": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-typescript": "7.12.1" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "dependencies": { + "@babel/compat-data": "7.12.1", + "@babel/helper-compilation-targets": "7.12.1", + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-option": "7.12.1", + "@babel/plugin-proposal-async-generator-functions": "7.12.1", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-dynamic-import": "7.12.1", + "@babel/plugin-proposal-export-namespace-from": "7.12.1", + "@babel/plugin-proposal-json-strings": "7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-proposal-private-methods": "7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4", + "@babel/plugin-syntax-class-properties": "7.12.1", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-syntax-export-namespace-from": "7.8.3", + "@babel/plugin-syntax-json-strings": "7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", + "@babel/plugin-syntax-numeric-separator": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3", + "@babel/plugin-syntax-optional-chaining": "7.8.3", + "@babel/plugin-syntax-top-level-await": "7.12.1", + "@babel/plugin-transform-arrow-functions": "7.12.1", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-block-scoped-functions": "7.12.1", + "@babel/plugin-transform-block-scoping": "7.12.1", + "@babel/plugin-transform-classes": "7.12.1", + "@babel/plugin-transform-computed-properties": "7.12.1", + "@babel/plugin-transform-destructuring": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/plugin-transform-duplicate-keys": "7.12.1", + "@babel/plugin-transform-exponentiation-operator": "7.12.1", + "@babel/plugin-transform-for-of": "7.12.1", + "@babel/plugin-transform-function-name": "7.12.1", + "@babel/plugin-transform-literals": "7.12.1", + "@babel/plugin-transform-member-expression-literals": "7.12.1", + "@babel/plugin-transform-modules-amd": "7.12.1", + "@babel/plugin-transform-modules-commonjs": "7.12.1", + "@babel/plugin-transform-modules-systemjs": "7.12.1", + "@babel/plugin-transform-modules-umd": "7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", + "@babel/plugin-transform-new-target": "7.12.1", + "@babel/plugin-transform-object-super": "7.12.1", + "@babel/plugin-transform-parameters": "7.12.1", + "@babel/plugin-transform-property-literals": "7.12.1", + "@babel/plugin-transform-regenerator": "7.12.1", + "@babel/plugin-transform-reserved-words": "7.12.1", + "@babel/plugin-transform-shorthand-properties": "7.12.1", + "@babel/plugin-transform-spread": "7.12.1", + "@babel/plugin-transform-sticky-regex": "7.12.1", + "@babel/plugin-transform-template-literals": "7.12.1", + "@babel/plugin-transform-typeof-symbol": "7.12.1", + "@babel/plugin-transform-unicode-escapes": "7.12.1", + "@babel/plugin-transform-unicode-regex": "7.12.1", + "@babel/preset-modules": "0.1.4", + "@babel/types": "7.12.1", + "core-js-compat": "3.6.5", + "semver": "5.7.1" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/types": "7.12.1", + "esutils": "2.0.3" + } + }, + "node_modules/@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-react-jsx": "7.12.1", + "@babel/plugin-transform-react-jsx-development": "7.12.1", + "@babel/plugin-transform-react-jsx-self": "7.12.1", + "@babel/plugin-transform-react-jsx-source": "7.12.1", + "@babel/plugin-transform-react-pure-annotations": "7.12.1" + } + }, + "node_modules/@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-typescript": "7.12.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "dependencies": { + "regenerator-runtime": "0.13.7" + } + }, + "node_modules/@babel/runtime-corejs3": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", + "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "dependencies": { + "core-js-pure": "3.6.5", + "regenerator-runtime": "0.13.7" + } + }, + "node_modules/@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "node_modules/@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "@babel/generator": "7.12.1", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1", + "debug": "4.2.0", + "globals": "11.12.0", + "lodash": "4.17.20" + } + }, + "node_modules/@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "dependencies": { + "@babel/helper-validator-identifier": "7.10.4", + "lodash": "4.17.20", + "to-fast-properties": "2.0.0" + } + }, + "node_modules/@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "node_modules/@docsearch/css": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", + "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + }, + "node_modules/@docsearch/react": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", + "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "dependencies": { + "@docsearch/css": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", + "algoliasearch": "^4.0.0" + }, + "peerDependencies": { + "react": "^16.8.0", + "react-dom": "^16.8.0" + } + }, + "node_modules/@docusaurus/core": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", + "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "dependencies": { + "@babel/core": "^7.9.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", + "@babel/plugin-proposal-optional-chaining": "^7.10.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.9.0", + "@babel/preset-env": "^7.9.0", + "@babel/preset-react": "^7.9.4", + "@babel/preset-typescript": "^7.9.0", + "@babel/runtime": "^7.9.2", + "@babel/runtime-corejs3": "^7.10.4", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@hapi/joi": "^17.1.1", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.3.0", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.0.3", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.1.1", + "express": "^4.17.1", + "file-loader": "^6.0.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "html-minifier-terser": "^5.0.5", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.0.4", + "import-fresh": "^3.2.1", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.5.2", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.0.0-beta", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.1.2", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.1.2", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.0", + "wait-file": "^1.0.5", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + }, + "bin": { + "docusaurus": "bin/docusaurus.js" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/mdx-loader": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.66.tgz", + "integrity": "sha512-IvtrTNeAaynEGgfCbC4CeBgO76Mu76cGogBGv8a84bYeyCOtlxOJoH6JHkJ7T/v5D6lM16qzwx5oqesZ0kZuzA==", + "dependencies": { + "@babel/parser": "^7.9.4", + "@babel/traverse": "^7.9.0", + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@mdx-js/mdx": "^1.5.8", + "@mdx-js/react": "^1.5.8", + "escape-html": "^1.0.3", + "file-loader": "^6.0.0", + "fs-extra": "^8.1.0", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.2", + "loader-utils": "^1.2.3", + "mdast-util-to-string": "^1.1.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.0" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/mdx-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@docusaurus/mdx-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-blog": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.66.tgz", + "integrity": "sha512-voK5ZUZcUn5blIDakYNKQ42wPMZLfrZnvEJuwh/8S/W1oNbPN935NBu9vL23fHEmp9L2MGykAdaCmev0Su04yQ==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "chalk": "^3.0.0", + "feed": "^4.1.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.5.2", + "reading-time": "^1.2.0", + "remark-admonitions": "^1.2.1", + "webpack": "^4.44.1" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@docusaurus/plugin-content-blog/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.66.tgz", + "integrity": "sha512-jvFKJR7BgjIq6xdmPg+7d2DS1fBeuIfmRTtB/apgfIW8NWO5N0DRYXOj0lgpw/ICwW//o8cLbrN+jkLlzTV/eg==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "chalk": "^3.0.0", + "execa": "^3.4.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "import-fresh": "^3.2.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.19", + "lodash.flatmap": "^4.5.0", + "lodash.groupby": "^4.6.0", + "lodash.pick": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.sortby": "^4.6.0", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "utility-types": "^3.10.0", + "webpack": "^4.44.1" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/plugin-content-docs/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@docusaurus/plugin-content-pages": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.66.tgz", + "integrity": "sha512-mY26Aeb/Wf+NFLy70YvXgdLTB+2iPN0SKOVKYwgg6ZN7Nm2kPwEpSVRq2iwiqlWk2G/vOM+ADm99Gxvm3kS61A==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "globby": "^10.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "webpack": "^4.44.1" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/@docusaurus/plugin-content-pages/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.66.tgz", + "integrity": "sha512-9AZaEUxaY0CDOCWXQMfY3TzG79HkquZlVeJOZaA6IvCoK/Oq3B58TMNLiQyA6TA2DYf5ZYQorLJaMd02x5qBQw==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "react-json-view": "^1.19.1" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/plugin-google-analytics": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.66.tgz", + "integrity": "sha512-HVWRLHtlQYpVqH3MHloUmktJMXt7oMDQzBlKzrwAMiWUK1oXFX35DrKjTt2SE2SADpObnwWFjo0E71YT0ApQLw==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/plugin-google-gtag": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.66.tgz", + "integrity": "sha512-MVnzApLSQaC38nVS+A/WkXEV4kHeX6Q/KM2DqkLeovNWLBtkQ0aHL3bvn1clAEmB33Pia0v93mzG+I1+9mrquA==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/plugin-sitemap": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.66.tgz", + "integrity": "sha512-ztDevVIREyq8g+QhSGpDqscVqtubcPnEE3a4JwWSALQ2D6JscIxg897axwZSZNUMxrHBuXRjOEYOtVb/O/stVg==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "fs-extra": "^8.1.0", + "sitemap": "^3.2.2" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.66.tgz", + "integrity": "sha512-FjxjchzUS6vOUSr9Pc5kqOSQAnc+cAYsR4pTlqwD2uOJcZMr2vQ6jeKbJnhEmUYwAvzdKOVnCndnxbA+Ii8L3w==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", + "@docusaurus/plugin-debug": "2.0.0-alpha.66", + "@docusaurus/plugin-google-analytics": "2.0.0-alpha.66", + "@docusaurus/plugin-google-gtag": "2.0.0-alpha.66", + "@docusaurus/plugin-sitemap": "2.0.0-alpha.66", + "@docusaurus/theme-classic": "2.0.0-alpha.66", + "@docusaurus/theme-search-algolia": "2.0.0-alpha.66" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/theme-classic": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.66.tgz", + "integrity": "sha512-WsWqzfzA2gIF5TUMGSbiAeDeNZtKvsgymTQzalcwyhyT/QI0ywcag+03Bmjeq4H3PTC3qU+tkhddO2Rh5w/YCw==", + "dependencies": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "@mdx-js/mdx": "^1.5.8", + "@mdx-js/react": "^1.5.8", + "@types/react-toggle": "^4.0.2", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^2.2.0", + "infima": "0.2.0-alpha.13", + "lodash": "^4.17.19", + "parse-numeric-range": "^0.0.2", + "prism-react-renderer": "^1.1.0", + "prismjs": "^1.20.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.1.2", + "react-toggle": "^4.1.1" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/theme-search-algolia": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.66.tgz", + "integrity": "sha512-5k/Fwt81Gyjv9vPE+gO8mraEHx5IqEmHLwqld5yXj7yix5XrxywkaanHqC0cFJG4MFUBgF6vNjJC8CtfLnT4Tw==", + "dependencies": { + "@docsearch/react": "^1.0.0-alpha.27", + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "algoliasearch": "^4.0.0", + "algoliasearch-helper": "^3.1.1", + "clsx": "^1.1.1", + "eta": "^1.1.1", + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=10.15.1" + }, + "peerDependencies": { + "react": "^16.8.4", + "react-dom": "^16.8.4" + } + }, + "node_modules/@docusaurus/types": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.66.tgz", + "integrity": "sha512-Zd2Kguw0+3faifr83ruIV4i/+KqfqM+zK3DpqCBxdtkP+ORLKbgsIQ48fJ40OOhQrvl38Ay4E+1w7USrrkj4Qg==", + "dependencies": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "node_modules/@docusaurus/utils": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.66.tgz", + "integrity": "sha512-47jGB+Z3YVM6Xf1hxyNbJLMmc1qoTLmfwSf7NseKSkpjucbc5Ueivr+oVYp5yWoZw5sT5bObmdJYfJoD/RrbOg==", + "dependencies": { + "escape-string-regexp": "^2.0.0", + "fs-extra": "^8.1.0", + "gray-matter": "^4.0.2", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/utils-validation": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.66.tgz", + "integrity": "sha512-vlenwY3THondey21x1qAUZyDz9qiG7ec2CBM9HgY1Ns8XhrKah9zz7TEGXjqM9lhqMQQRkvcCcveti9EXR0fcA==", + "dependencies": { + "@docusaurus/utils": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "chalk": "^3.0.0" + }, + "engines": { + "node": ">=10.15.1" + } + }, + "node_modules/@docusaurus/utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "node_modules/@emotion/core": { + "version": "10.0.35", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz", + "integrity": "sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + }, + "peerDependencies": { + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "node_modules/@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/memoize": "0.7.4" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + } + }, + "node_modules/@emotion/serialize/node_modules/csstype": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", + "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/styled": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", + "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/styled-base": "^10.0.27", + "babel-plugin-emotion": "^10.0.27" + }, + "peerDependencies": { + "@emotion/core": "^10.0.27", + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/styled-base": { + "version": "10.0.31", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", + "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + }, + "peerDependencies": { + "@emotion/core": "^10.0.28", + "react": ">=16.3.0" + } + }, + "node_modules/@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true, + "optional": true + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", + "dev": true, + "optional": true + }, + "node_modules/@endiliey/static-site-generator-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", + "dependencies": { + "bluebird": "3.7.2", + "cheerio": "0.22.0", + "eval": "0.1.4", + "url": "0.11.0", + "webpack-sources": "1.4.3" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz", + "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz", + "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.2.32", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz", + "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.32" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz", + "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.32" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/react-fontawesome": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.12.tgz", + "integrity": "sha512-kV6HtqotM3K4YIXlTVvomuIi6QgGCvYm++ImyEx2wwgmSppZ6kbbA29ASwjAUBD63j2OFU0yoxeXpZkjrrX0qQ==", + "dependencies": { + "prop-types": "^15.7.2" + }, + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.20", + "react": ">=16.x" + } + }, + "node_modules/@francoischalifour/autocomplete-core": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz", + "integrity": "sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==" + }, + "node_modules/@francoischalifour/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz", + "integrity": "sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==" + }, + "node_modules/@hapi/address": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", + "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "dependencies": { + "@hapi/hoek": "9.1.0" + } + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "node_modules/@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" + }, + "node_modules/@hapi/hoek": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", + "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" + }, + "node_modules/@hapi/joi": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", + "dependencies": { + "@hapi/address": "4.1.0", + "@hapi/formula": "2.0.0", + "@hapi/hoek": "9.1.0", + "@hapi/pinpoint": "2.0.0", + "@hapi/topo": "5.0.0" + } + }, + "node_modules/@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + }, + "node_modules/@hapi/topo": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "dependencies": { + "@hapi/hoek": "9.1.0" + } + }, + "node_modules/@mdx-js/mdx": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.19.tgz", + "integrity": "sha512-L3eLhEFnV/2bcb9XwOegsRmLHd1oEDQPtTBVezhptQ5U1YM+/WQNzx1apjzVTAyukwOanUXnTUMjRUtqJNgFCg==", + "dependencies": { + "@babel/core": "7.11.6", + "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.19", + "babel-plugin-apply-mdx-type-prop": "1.6.19", + "babel-plugin-extract-import-names": "1.6.19", + "camelcase-css": "2.0.1", + "detab": "2.0.3", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "9.1.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.19", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@mdx-js/mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@mdx-js/react": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.19.tgz", + "integrity": "sha512-RS37Tagqyp2R0XFPoUZeSbZC5uJQRPhqOHWeT1LEwxESjMWb3VORHz7E827ldeQr3UW6VEQEyq/THegu+bLj6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "react": "^16.13.1" + } + }, + "node_modules/@mdx-js/util": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.19.tgz", + "integrity": "sha512-bkkQNSHz3xSr3KRHUQ2Qk2XhewvvXAOUqjIUKwcQuL4ijOA4tUHZfUgXExi5CpMysrX7izcsyICtXjZHlfJUjg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/@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==", + "dependencies": { + "call-me-maybe": "1.0.1", + "glob-to-regexp": "0.3.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "dependencies": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "1.1.9" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "1.8.0" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "dependencies": { + "mkdirp": "1.0.4" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "node_modules/@styled-system/background": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", + "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/border": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", + "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/color": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", + "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", + "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", + "dev": true, + "optional": true, + "dependencies": { + "object-assign": "^4.1.1" + } + }, + "node_modules/@styled-system/css": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", + "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==", + "dev": true, + "optional": true + }, + "node_modules/@styled-system/flexbox": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", + "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/grid": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", + "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/layout": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", + "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/position": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", + "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/shadow": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", + "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/should-forward-prop": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz", + "integrity": "sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/is-prop-valid": "^0.8.1", + "@emotion/memoize": "^0.7.1", + "styled-system": "^5.1.5" + } + }, + "node_modules/@styled-system/space": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", + "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/typography": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", + "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2" + } + }, + "node_modules/@styled-system/variant": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", + "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/core": "^5.1.2", + "@styled-system/css": "^5.1.5" + } + }, + "node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.4.0.tgz", + "integrity": "sha512-zLl4Fl3NvKxxjWNkqEcpdSOpQ3LGVH2BNFQ6vjaK6sFo2IrSznrhURIPI0HAphKiiIwNYjAfE0TNoQDSZv0U9A==" + }, + "node_modules/@svgr/babel-preset": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.4.0.tgz", + "integrity": "sha512-Gyx7cCxua04DBtyILTYdQxeO/pwfTBev6+eXTbVbxe4HTGhOUW6yo7PSbG2p6eJMl44j6XSequ0ZDP7bl0nu9A==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "5.4.0", + "@svgr/babel-plugin-transform-svg-component": "5.4.0" + } + }, + "node_modules/@svgr/core": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.4.0.tgz", + "integrity": "sha512-hWGm1DCCvd4IEn7VgDUHYiC597lUYhFau2lwJBYpQWDirYLkX4OsXu9IslPgJ9UpP7wsw3n2Ffv9sW7SXJVfqQ==", + "dependencies": { + "@svgr/plugin-jsx": "5.4.0", + "camelcase": "6.1.0", + "cosmiconfig": "6.0.0" + } + }, + "node_modules/@svgr/hast-util-to-babel-ast": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.4.0.tgz", + "integrity": "sha512-+U0TZZpPsP2V1WvVhqAOSTk+N+CjYHdZx+x9UBa1eeeZDXwH8pt0CrQf2+SvRl/h2CAPRFkm+Ey96+jKP8Bsgg==", + "dependencies": { + "@babel/types": "7.12.1" + } + }, + "node_modules/@svgr/plugin-jsx": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.4.0.tgz", + "integrity": "sha512-SGzO4JZQ2HvGRKDzRga9YFSqOqaNrgLlQVaGvpZ2Iht2gwRp/tq+18Pvv9kS9ZqOMYgyix2LLxZMY1LOe9NPqw==", + "dependencies": { + "@babel/core": "7.12.3", + "@svgr/babel-preset": "5.4.0", + "@svgr/hast-util-to-babel-ast": "5.4.0", + "svg-parser": "2.0.4" + } + }, + "node_modules/@svgr/plugin-svgo": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.4.0.tgz", + "integrity": "sha512-3Cgv3aYi1l6SHyzArV9C36yo4kgwVdF3zPQUC6/aCDUeXAofDYwE5kk3e3oT5ZO2a0N3lB+lLGvipBG6lnG8EA==", + "dependencies": { + "cosmiconfig": "6.0.0", + "merge-deep": "3.0.2", + "svgo": "1.3.2" + } + }, + "node_modules/@svgr/webpack": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.4.0.tgz", + "integrity": "sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg==", + "dependencies": { + "@babel/core": "7.12.3", + "@babel/plugin-transform-react-constant-elements": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.1", + "@svgr/core": "5.4.0", + "@svgr/plugin-jsx": "5.4.0", + "@svgr/plugin-svgo": "5.4.0", + "loader-utils": "2.0.0" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "1.1.3" + } + }, + "node_modules/@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dependencies": { + "@types/minimatch": "3.0.3", + "@types/node": "14.11.10" + } + }, + "node_modules/@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + }, + "node_modules/@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + }, + "node_modules/@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "node_modules/@types/node": { + "version": "14.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", + "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "node_modules/@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "node_modules/@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "node_modules/@types/react": { + "version": "16.9.53", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", + "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-toggle": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.2.tgz", + "integrity": "sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA==", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + }, + "node_modules/@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" + }, + "node_modules/@types/uglify-js": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.0.tgz", + "integrity": "sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q==", + "dependencies": { + "source-map": "0.6.1" + } + }, + "node_modules/@types/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "node_modules/@types/webpack": { + "version": "4.41.22", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", + "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", + "dependencies": { + "@types/anymatch": "1.3.1", + "@types/node": "14.11.10", + "@types/tapable": "1.0.6", + "@types/uglify-js": "3.11.0", + "@types/webpack-sources": "2.0.0", + "source-map": "0.6.1" + } + }, + "node_modules/@types/webpack-sources": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz", + "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==", + "dependencies": { + "@types/node": "14.11.10", + "@types/source-list-map": "0.1.2", + "source-map": "0.7.3" + } + }, + "node_modules/@types/webpack-sources/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "node_modules/@types/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dependencies": { + "@xtuc/ieee754": "1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "2.1.27", + "negotiator": "0.6.2" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dependencies": { + "clean-stack": "2.2.0", + "indent-string": "4.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "3.1.3", + "fast-json-stable-stringify": "2.1.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.4.0" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "node_modules/algoliasearch": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.5.1.tgz", + "integrity": "sha512-b6yT1vWMlBdVObQipKxvt0M6SEvGetVj+FFFlo0Fy06gkdj6WCJaS4t10Q/hC3I2VG9QmpCqlK3Esgg1y1E+uw==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.5.1", + "@algolia/cache-common": "4.5.1", + "@algolia/cache-in-memory": "4.5.1", + "@algolia/client-account": "4.5.1", + "@algolia/client-analytics": "4.5.1", + "@algolia/client-common": "4.5.1", + "@algolia/client-recommendation": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/logger-common": "4.5.1", + "@algolia/logger-console": "4.5.1", + "@algolia/requester-browser-xhr": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/requester-node-http": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "node_modules/algoliasearch-helper": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", + "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", + "dependencies": { + "events": "^1.1.1" + }, + "peerDependencies": { + "algoliasearch": ">= 3.1 < 5" + } + }, + "node_modules/algoliasearch-helper/node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "node_modules/ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dependencies": { + "string-width": "3.1.0" + } + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "dependencies": { + "type-fest": "0.11.0" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + }, + "node_modules/ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "node_modules/ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "node_modules/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==", + "dependencies": { + "color-convert": "1.9.3" + } + }, + "node_modules/anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dependencies": { + "normalize-path": "3.0.0", + "picomatch": "2.2.2" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "1.0.3" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "node_modules/array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "4.11.9", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "safer-buffer": "2.1.2" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dependencies": { + "object-assign": "4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dependencies": { + "lodash": "4.17.20" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "node_modules/autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dependencies": { + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "colorette": "1.2.1", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.35", + "postcss-value-parser": "4.1.0" + } + }, + "node_modules/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=", + "dependencies": { + "chalk": "1.1.3", + "esutils": "2.0.3", + "js-tokens": "3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dependencies": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "2.1.1" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "node_modules/babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "dependencies": { + "find-cache-dir": "2.1.0", + "loader-utils": "1.4.0", + "mkdirp": "0.5.5", + "pify": "4.0.1", + "schema-utils": "2.7.1" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.19.tgz", + "integrity": "sha512-zAuL11EaBbeNpfTqsa9xP7mkvX3V4LaEV6M9UUaI4zQtTqN5JwvDyhNsALQs5Ud7WFQSXtoqU74saTgE+rgZOw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.19" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dependencies": { + "object.assign": "4.1.1" + } + }, + "node_modules/babel-plugin-emotion": { + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, + "node_modules/babel-plugin-extract-import-names": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", + "integrity": "sha512-5kbSEhQdg1ybR9OnxybbyR1PXw51z6T6ZCtX3vYSU6t1pC/+eBlSzWXyU2guStbwQgJyxS+mHWSNnL7PUdzAlw==", + "dependencies": { + "@babel/helper-plugin-utils": "7.10.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "optional": true, + "dependencies": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "node_modules/babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true, + "optional": true + }, + "node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.3.0", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.2", + "pascalcase": "0.1.1" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "1.0.2" + } + }, + "node_modules/base/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/base/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "node_modules/base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "node_modules/bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dependencies": { + "bluebird": "3.7.2", + "check-types": "8.0.3", + "hoopy": "0.1.4", + "tryer": "1.0.1" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "node_modules/binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + }, + "node_modules/body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dependencies": { + "bytes": "3.1.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "1.6.18" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dependencies": { + "array-flatten": "2.1.2", + "deep-equal": "1.1.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "node_modules/boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dependencies": { + "ansi-align": "3.0.0", + "camelcase": "5.3.1", + "chalk": "3.0.0", + "cli-boxes": "2.2.1", + "string-width": "4.2.0", + "term-size": "2.2.0", + "type-fest": "0.8.1", + "widest-line": "3.1.0" + } + }, + "node_modules/boxen/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "7.0.1" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "node_modules/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==", + "dependencies": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "1.0.4", + "des.js": "1.0.1", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dependencies": { + "bn.js": "4.11.9", + "randombytes": "2.1.0" + } + }, + "node_modules/browserify-rsa/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "5.1.3", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.5.3", + "inherits": "2.0.4", + "parse-asn1": "5.1.6", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "1.0.11" + } + }, + "node_modules/browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "dependencies": { + "caniuse-lite": "1.0.30001148", + "electron-to-chromium": "1.3.582", + "escalade": "3.1.1", + "node-releases": "1.1.63" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "1.3.1", + "ieee754": "1.1.13", + "isarray": "1.0.0" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "node_modules/buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "node_modules/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=" + }, + "node_modules/bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "node_modules/cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "dependencies": { + "@npmcli/move-file": "1.0.1", + "chownr": "2.0.0", + "fs-minipass": "2.1.0", + "glob": "7.1.6", + "infer-owner": "1.0.4", + "lru-cache": "6.0.0", + "minipass": "3.1.3", + "minipass-collect": "1.0.2", + "minipass-flush": "1.0.5", + "minipass-pipeline": "1.2.4", + "mkdirp": "1.0.4", + "p-map": "4.0.0", + "promise-inflight": "1.0.1", + "rimraf": "3.0.2", + "ssri": "8.0.0", + "tar": "6.0.5", + "unique-filename": "1.1.1" + } + }, + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "1.0.0", + "component-emitter": "1.3.0", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.1", + "to-object-path": "0.3.0", + "union-value": "1.0.1", + "unset-value": "1.0.0" + } + }, + "node_modules/cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dependencies": { + "buffer-json": "2.0.0", + "find-cache-dir": "3.3.1", + "loader-utils": "1.4.0", + "mkdirp": "0.5.5", + "neo-async": "2.6.2", + "schema-utils": "2.7.1" + } + }, + "node_modules/cache-loader/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "node_modules/cache-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "node_modules/cache-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/cache-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/cache-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "4.1.0" + } + }, + "node_modules/cache-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "6.3.0" + } + }, + "node_modules/cache-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "2.3.0" + } + }, + "node_modules/cache-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "node_modules/cache-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "4.1.0" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "1.0.2", + "get-stream": "5.2.0", + "http-cache-semantics": "4.1.0", + "keyv": "3.1.0", + "lowercase-keys": "2.0.0", + "normalize-url": "4.5.0", + "responselike": "1.0.2" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "3.0.0" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "node_modules/cacheable-request/node_modules/normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + }, + "node_modules/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=" + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dependencies": { + "callsites": "2.0.0" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + }, + "node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dependencies": { + "caller-callsite": "2.0.0" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "node_modules/camel-case": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "dependencies": { + "pascal-case": "3.1.1", + "tslib": "1.14.1" + } + }, + "node_modules/camelcase": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dependencies": { + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==" + }, + "node_modules/ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dependencies": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "node_modules/chalk/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "2.0.1" + } + }, + "node_modules/chalk/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "1.1.4" + } + }, + "node_modules/chalk/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "4.0.0" + } + }, + "node_modules/character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" + }, + "node_modules/cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dependencies": { + "css-select": "1.2.0", + "dom-serializer": "0.1.1", + "entities": "1.1.2", + "htmlparser2": "3.10.1", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.2", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + } + }, + "node_modules/chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "dependencies": { + "anymatch": "3.1.1", + "braces": "3.0.2", + "fsevents": "2.1.3", + "glob-parent": "5.1.1", + "is-binary-path": "2.1.0", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "readdirp": "3.5.0" + }, + "optionalDependencies": { + "fsevents": "2.1.3" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "node_modules/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==", + "dependencies": { + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "node_modules/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==", + "dependencies": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } + }, + "node_modules/classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "node_modules/clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "dependencies": { + "source-map": "0.6.1" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "3.1.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "node_modules/clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dependencies": { + "string-width": "3.1.0", + "strip-ansi": "5.2.0", + "wrap-ansi": "5.1.0" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + }, + "node_modules/clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "dependencies": { + "for-own": "0.1.5", + "is-plain-object": "2.0.4", + "kind-of": "3.2.2", + "lazy-cache": "1.0.4", + "shallow-clone": "0.1.2" + } + }, + "node_modules/clone-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "1.0.1" + } + }, + "node_modules/clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "1.5.4", + "chalk": "2.4.2", + "q": "1.5.1" + } + }, + "node_modules/coa/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dependencies": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "node_modules/color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "dependencies": { + "color-convert": "1.9.3", + "color-string": "1.5.4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "node_modules/color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "dependencies": { + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" + } + }, + "node_modules/colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "node_modules/comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": "1.44.0" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "1.3.7", + "bytes": "3.0.0", + "compressible": "2.0.18", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dependencies": { + "buffer-from": "1.1.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "typedarray": "0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/concat-stream/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "5.3.0", + "graceful-fs": "4.2.4", + "make-dir": "3.1.0", + "unique-string": "2.0.0", + "write-file-atomic": "3.0.3", + "xdg-basedir": "4.0.0" + } + }, + "node_modules/configstore/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "6.3.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "node_modules/consola": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", + "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "node_modules/content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/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==" + }, + "node_modules/convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dependencies": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.5", + "rimraf": "2.7.1", + "run-queue": "1.0.3" + } + }, + "node_modules/copy-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "node_modules/copy-text-to-clipboard": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz", + "integrity": "sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "dependencies": { + "toggle-selection": "^1.0.6" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", + "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", + "dependencies": { + "cacache": "15.0.5", + "fast-glob": "3.2.4", + "find-cache-dir": "3.3.1", + "glob-parent": "5.1.1", + "globby": "11.0.1", + "loader-utils": "2.0.0", + "normalize-path": "3.0.0", + "p-limit": "3.0.2", + "schema-utils": "3.0.0", + "serialize-javascript": "5.0.1", + "webpack-sources": "1.4.3" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "dependencies": { + "array-union": "2.1.0", + "dir-glob": "3.0.1", + "fast-glob": "3.2.4", + "ignore": "5.1.8", + "merge2": "1.4.1", + "slash": "3.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "4.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "6.3.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dependencies": { + "p-try": "2.2.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "2.3.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "2.2.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "4.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dependencies": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "node_modules/core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dependencies": { + "browserslist": "4.14.5", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + }, + "node_modules/core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "dependencies": { + "@types/parse-json": "4.0.0", + "import-fresh": "3.2.1", + "parse-json": "5.1.0", + "path-type": "4.0.0", + "yaml": "1.10.0" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "4.11.9", + "elliptic": "6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/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==", + "dependencies": { + "cipher-base": "1.0.4", + "inherits": "2.0.4", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "node_modules/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==", + "dependencies": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.4", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "dependencies": { + "path-key": "3.1.1", + "shebang-command": "2.0.0", + "which": "2.0.2" + } + }, + "node_modules/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==", + "dependencies": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.2.1", + "create-ecdh": "4.0.4", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.4", + "pbkdf2": "3.1.1", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "node_modules/css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dependencies": { + "postcss": "7.0.35", + "timsort": "0.3.0" + } + }, + "node_modules/css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dependencies": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dependencies": { + "camelcase": "5.3.1", + "cssesc": "3.0.0", + "icss-utils": "4.1.1", + "loader-utils": "1.4.0", + "normalize-path": "3.0.0", + "postcss": "7.0.35", + "postcss-modules-extract-imports": "2.0.0", + "postcss-modules-local-by-default": "3.0.3", + "postcss-modules-scope": "2.2.0", + "postcss-modules-values": "3.0.0", + "postcss-value-parser": "4.1.0", + "schema-utils": "2.7.1", + "semver": "6.3.0" + } + }, + "node_modules/css-loader/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "node_modules/css-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/css-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dependencies": { + "boolbase": "1.0.0", + "css-what": "2.1.3", + "domutils": "1.5.1", + "nth-check": "1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "0.6.1" + } + }, + "node_modules/css-tree/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "node_modules/cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "node_modules/cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dependencies": { + "cosmiconfig": "5.2.1", + "cssnano-preset-default": "4.0.7", + "is-resolvable": "1.1.0", + "postcss": "7.0.35" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dependencies": { + "css-declaration-sorter": "4.0.1", + "cssnano-util-raw-cache": "4.0.1", + "postcss": "7.0.35", + "postcss-calc": "7.0.5", + "postcss-colormin": "4.0.3", + "postcss-convert-values": "4.0.1", + "postcss-discard-comments": "4.0.2", + "postcss-discard-duplicates": "4.0.2", + "postcss-discard-empty": "4.0.1", + "postcss-discard-overridden": "4.0.1", + "postcss-merge-longhand": "4.0.11", + "postcss-merge-rules": "4.0.3", + "postcss-minify-font-values": "4.0.2", + "postcss-minify-gradients": "4.0.2", + "postcss-minify-params": "4.0.2", + "postcss-minify-selectors": "4.0.2", + "postcss-normalize-charset": "4.0.1", + "postcss-normalize-display-values": "4.0.2", + "postcss-normalize-positions": "4.0.2", + "postcss-normalize-repeat-style": "4.0.2", + "postcss-normalize-string": "4.0.2", + "postcss-normalize-timing-functions": "4.0.2", + "postcss-normalize-unicode": "4.0.1", + "postcss-normalize-url": "4.0.1", + "postcss-normalize-whitespace": "4.0.2", + "postcss-ordered-values": "4.1.2", + "postcss-reduce-initial": "4.0.3", + "postcss-reduce-transforms": "4.0.2", + "postcss-svgo": "4.0.2", + "postcss-unique-selectors": "4.0.1" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "node_modules/cssnano/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.14.0", + "parse-json": "4.0.0" + } + }, + "node_modules/cssnano/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "2.0.0", + "resolve-from": "3.0.0" + } + }, + "node_modules/cssnano/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "node_modules/cssnano/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "node_modules/csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "dependencies": { + "css-tree": "1.0.0-alpha.39" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "dependencies": { + "mdn-data": "2.0.6", + "source-map": "0.6.1" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "node_modules/csso/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "node_modules/debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "node_modules/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=" + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "1.0.1" + } + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dependencies": { + "is-arguments": "1.0.4", + "is-date-object": "1.0.2", + "is-regex": "1.1.1", + "object-is": "1.1.3", + "object-keys": "1.1.1", + "regexp.prototype.flags": "1.3.0" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "node_modules/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 + }, + "node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dependencies": { + "execa": "1.0.0", + "ip-regex": "2.1.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/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==", + "dependencies": { + "object-keys": "1.1.1" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "1.0.2", + "isobject": "3.0.1" + } + }, + "node_modules/define-property/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/define-property/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "node_modules/del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "dependencies": { + "globby": "10.0.2", + "graceful-fs": "4.2.4", + "is-glob": "4.0.1", + "is-path-cwd": "2.2.0", + "is-path-inside": "3.0.2", + "p-map": "3.0.0", + "rimraf": "3.0.2", + "slash": "3.0.0" + } + }, + "node_modules/del/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dependencies": { + "aggregate-error": "3.1.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/detab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", + "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "node_modules/detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "dependencies": { + "address": "1.1.2", + "debug": "2.6.9" + } + }, + "node_modules/detect-port/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/detect-port/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "4.11.9", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "4.0.0" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "node_modules/dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dependencies": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dependencies": { + "buffer-indexof": "1.1.1" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dependencies": { + "utila": "0.4.0" + } + }, + "node_modules/dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "dependencies": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "node_modules/dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dependencies": { + "domelementtype": "1.3.1", + "entities": "1.1.2" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dependencies": { + "domelementtype": "1.3.1" + } + }, + "node_modules/domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dependencies": { + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" + } + }, + "node_modules/dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "dependencies": { + "no-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "2.0.0" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "1.4.4", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "stream-shift": "1.0.1" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/duplexify/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.3.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", + "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" + }, + "node_modules/elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "dependencies": { + "bn.js": "4.11.9", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dependencies": { + "graceful-fs": "4.2.4", + "memory-fs": "0.5.0", + "tapable": "1.1.3" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dependencies": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + }, + "node_modules/enhanced-resolve/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/enhanced-resolve/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "node_modules/errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dependencies": { + "prr": "1.0.1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-negative-zero": "2.0.0", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "1.2.2", + "is-date-object": "1.0.2", + "is-symbol": "1.0.3" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/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=" + }, + "node_modules/eslint": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz", + "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz", + "integrity": "sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==", + "dev": true, + "dependencies": { + "get-stdin": "^6.0.0" + }, + "bin": { + "eslint-config-prettier-check": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=3.14.1" + } + }, + "node_modules/eslint-mdx": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.8.2.tgz", + "integrity": "sha512-j7mkBFr7zHLaiqGu+iWker9qwWfti29xUAuUDDad95l+H189R4++dsuSUB6u19wy6CCuspIt5I6katzbpRbbMw==", + "dev": true, + "dependencies": { + "espree": "^7.2.0", + "remark-mdx": "^1.6.16", + "remark-parse": "^8.0.3", + "tslib": "^2.0.1", + "unified": "^9.1.0" + }, + "engines": { + "node": ">=7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-mdx/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + }, + "node_modules/eslint-plugin-mdx": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.8.2.tgz", + "integrity": "sha512-fKkhsR1cTCHQUVcoguUmOohMo87297/H1Z0Zye3GF4ivvxcpX8fboLILLR2Em76QV8RrjP4sxrgBuOA9rBIumw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.8.2", + "eslint-plugin-react": "^7.20.6", + "rebass": "^4.0.7", + "remark-mdx": "^1.6.16", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "tslib": "^2.0.1", + "unified": "^9.1.0", + "vfile": "^4.1.1" + }, + "engines": { + "node": ">=7.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "optionalDependencies": { + "rebass": "^4.0.7" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-mdx/node_modules/tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + }, + "node_modules/eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "dependencies": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dependencies": { + "esrecurse": "4.3.0", + "estraverse": "4.3.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/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, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "node_modules/esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "5.2.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "node_modules/eta": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", + "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "node_modules/eval": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", + "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", + "dependencies": { + "require-like": "0.1.2" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + }, + "node_modules/eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "dependencies": { + "original": "1.0.2" + } + }, + "node_modules/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==", + "dependencies": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dependencies": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.3", + "strip-eof": "1.0.0" + } + }, + "node_modules/execa/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.7.1", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "node_modules/execa/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "node_modules/execa/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/execa/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dependencies": { + "shebang-regex": "1.0.0" + } + }, + "node_modules/execa/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + }, + "node_modules/execa/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "2.0.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dependencies": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/expand-brackets/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } + }, + "node_modules/expand-brackets/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dependencies": { + "accepts": "1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.6", + "qs": "6.7.0", + "range-parser": "1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "0.3.2", + "define-property": "1.0.0", + "expand-brackets": "2.1.4", + "extend-shallow": "2.0.1", + "fragment-cache": "0.2.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "1.0.2" + } + }, + "node_modules/extglob/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/extglob/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "dependencies": { + "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.walk": "1.2.4", + "glob-parent": "5.1.1", + "merge2": "1.4.1", + "micromatch": "4.0.2", + "picomatch": "2.2.2" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/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 + }, + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "dependencies": { + "punycode": "1.3.2" + } + }, + "node_modules/fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "dependencies": { + "reusify": "1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dependencies": { + "websocket-driver": "0.6.5" + } + }, + "node_modules/fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "dependencies": { + "fbjs": "^0.8.4" + } + }, + "node_modules/fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "dependencies": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + } + }, + "node_modules/fbjs/node_modules/core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=", + "deprecated": "core-js@<3 is no longer maintained and not recommended for usage due to the number of issues. Please, upgrade your dependencies to the actual version of core-js@3." + }, + "node_modules/feed": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", + "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "dependencies": { + "xml-js": "^1.6.11" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "dependencies": { + "loader-utils": "2.0.0", + "schema-utils": "3.0.0" + } + }, + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dependencies": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/filesize": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", + "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "5.0.1" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", + "unpipe": "1.0.0" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "1.0.1", + "make-dir": "2.1.0", + "pkg-dir": "3.0.0" + } + }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true, + "optional": true + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "3.0.0" + } + }, + "node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + } + }, + "node_modules/flush-write-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/flush-write-stream/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/flux": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", + "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "dependencies": { + "fbemitter": "^2.0.0", + "fbjs": "^0.8.0" + }, + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0-beta || ^16.0.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dependencies": { + "for-in": "1.0.2" + } + }, + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", + "dependencies": { + "babel-code-frame": "6.26.0", + "chalk": "2.4.2", + "chokidar": "3.4.3", + "micromatch": "3.1.10", + "minimatch": "3.0.4", + "semver": "5.7.1", + "tapable": "1.1.3", + "worker-rpc": "0.1.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/extend-shallow/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/fork-ts-checker-webpack-plugin/node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dependencies": { + "map-cache": "0.2.2" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dependencies": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/from2/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dependencies": { + "graceful-fs": "4.2.4", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "3.1.3" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dependencies": { + "graceful-fs": "4.2.4", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.7" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/fs-write-stream-atomic/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "node_modules/fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/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 + }, + "node_modules/gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "node_modules/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, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "3.0.0" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "node_modules/github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "dependencies": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "node_modules/github-slugger/node_modules/emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dependencies": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "node_modules/glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dependencies": { + "is-glob": "4.0.1" + } + }, + "node_modules/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=" + }, + "node_modules/global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "dependencies": { + "ini": "1.3.5" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dependencies": { + "global-prefix": "3.0.0" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dependencies": { + "ini": "1.3.5", + "kind-of": "6.0.3", + "which": "1.3.1" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "2.0.0" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "node_modules/globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "dependencies": { + "@types/glob": "7.1.3", + "array-union": "2.1.0", + "dir-glob": "3.0.1", + "fast-glob": "3.2.4", + "glob": "7.1.6", + "ignore": "5.1.8", + "merge2": "1.4.1", + "slash": "3.0.0" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "0.14.0", + "@szmarczak/http-timer": "1.1.2", + "cacheable-request": "6.1.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.1.0", + "to-readable-stream": "1.0.0", + "url-parse-lax": "3.0.0" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "node_modules/gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "dependencies": { + "js-yaml": "3.14.0", + "kind-of": "6.0.3", + "section-matter": "1.0.0", + "strip-bom-string": "1.0.0" + } + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dependencies": { + "duplexer": "0.1.2", + "pify": "4.0.1" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "1.1.1" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dependencies": { + "ansi-regex": "2.1.1" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dependencies": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" + } + }, + "node_modules/hast-to-hyperscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", + "dependencies": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", + "dependencies": { + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "dependencies": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "dependencies": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "dependencies": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "node_modules/history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "dependencies": { + "@babel/runtime": "7.12.1", + "loose-envify": "1.4.0", + "resolve-pathname": "3.0.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3", + "value-equal": "1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dependencies": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "dependencies": { + "react-is": "16.13.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dependencies": { + "inherits": "2.0.4", + "obuf": "1.1.2", + "readable-stream": "2.3.7", + "wbuf": "1.7.3" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/hpack.js/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "node_modules/html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "node_modules/html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" + }, + "node_modules/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "dependencies": { + "camel-case": "4.1.1", + "clean-css": "4.2.3", + "commander": "4.1.1", + "he": "1.2.0", + "param-case": "3.0.3", + "relateurl": "0.2.7", + "terser": "4.8.0" + } + }, + "node_modules/html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + }, + "node_modules/html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "dependencies": { + "@types/html-minifier-terser": "5.1.1", + "@types/tapable": "1.0.6", + "@types/webpack": "4.41.22", + "html-minifier-terser": "5.1.1", + "loader-utils": "1.4.0", + "lodash": "4.17.20", + "pretty-error": "2.1.2", + "tapable": "1.1.3", + "util.promisify": "1.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/html-webpack-plugin/node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dependencies": { + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.1.0" + } + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dependencies": { + "domelementtype": "1.3.1", + "domhandler": "2.4.2", + "domutils": "1.5.1", + "entities": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "3.6.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "node_modules/http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dependencies": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "toidentifier": "1.0.0" + } + }, + "node_modules/http-errors/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "4.0.7", + "follow-redirects": "1.13.0", + "requires-port": "1.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dependencies": { + "http-proxy": "1.18.1", + "is-glob": "4.0.1", + "lodash": "4.17.20", + "micromatch": "3.1.10" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/http-proxy-middleware/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/http-proxy-middleware/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/http-proxy-middleware/node_modules/extend-shallow/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/http-proxy-middleware/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/http-proxy-middleware/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/http-proxy-middleware/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/http-proxy-middleware/node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": "2.1.2" + } + }, + "node_modules/icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "node_modules/immer": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dependencies": { + "import-from": "2.1.0" + } + }, + "node_modules/import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "dependencies": { + "parent-module": "1.0.1", + "resolve-from": "4.0.0" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dependencies": { + "resolve-from": "3.0.0" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dependencies": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/infima": { + "version": "0.2.0-alpha.13", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", + "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dependencies": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "node_modules/inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dependencies": { + "ansi-escapes": "4.3.1", + "chalk": "4.1.0", + "cli-cursor": "3.1.0", + "cli-width": "3.0.0", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "6.0.0", + "through": "2.3.8" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "2.0.1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dependencies": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "1.1.4" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "4.0.0" + } + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dependencies": { + "default-gateway": "4.2.0", + "ipaddr.js": "1.9.1" + } + }, + "node_modules/internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "dependencies": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internal-slot/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "node_modules/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=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dependencies": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "2.1.0" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "2.0.0" + } + }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dependencies": { + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/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=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "node_modules/is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.0" + } + }, + "node_modules/is-descriptor/node_modules/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==" + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "node_modules/is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "node_modules/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=" + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dependencies": { + "is-extglob": "2.1.1" + } + }, + "node_modules/is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dependencies": { + "global-dirs": "2.0.1", + "is-path-inside": "3.0.2" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + }, + "node_modules/is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dependencies": { + "is-path-inside": "2.1.0" + } + }, + "node_modules/is-path-in-cwd/node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dependencies": { + "path-is-inside": "1.0.2" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "node_modules/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=" + }, + "node_modules/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==", + "dependencies": { + "isobject": "3.0.1" + } + }, + "node_modules/is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "dependencies": { + "has-symbols": "1.0.1" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "node_modules/is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "node_modules/is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dependencies": { + "html-comment-regex": "1.1.2" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dependencies": { + "has-symbols": "1.0.1" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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==" + }, + "node_modules/is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dependencies": { + "is-docker": "2.1.1" + } + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "node_modules/isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dependencies": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "node_modules/jest-worker": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", + "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "dependencies": { + "@types/node": "14.11.10", + "merge-stream": "2.0.0", + "supports-color": "7.2.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "4.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "dependencies": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/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==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "node_modules/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==" + }, + "node_modules/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 + }, + "node_modules/json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "node_modules/json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dependencies": { + "graceful-fs": "4.2.4" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "node_modules/last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dependencies": { + "lodash": "4.17.20", + "webpack-sources": "1.4.3" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "6.5.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "node_modules/loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "2.1.3" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "node_modules/lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "node_modules/lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "node_modules/lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + }, + "node_modules/lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "node_modules/lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "node_modules/lodash.flatmap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", + "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "node_modules/lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "node_modules/lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + }, + "node_modules/lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "node_modules/lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "node_modules/lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" + }, + "node_modules/lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "node_modules/lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "node_modules/lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dependencies": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.2.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dependencies": { + "lodash._reinterpolate": "3.0.0" + } + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "node_modules/loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" + }, + "node_modules/longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/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==", + "dependencies": { + "js-tokens": "4.0.0" + } + }, + "node_modules/lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "4.0.0" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "4.0.1", + "semver": "5.7.1" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dependencies": { + "object-visit": "1.0.1" + } + }, + "node_modules/markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "dependencies": { + "repeat-string": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "3.1.0", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "dependencies": { + "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", + "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "dependencies": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.3", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dependencies": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + }, + "node_modules/memory-fs/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/memory-fs/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "dependencies": { + "arr-union": "3.1.0", + "clone-deep": "0.2.4", + "kind-of": "3.2.2" + } + }, + "node_modules/merge-deep/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "node_modules/microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "node_modules/micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dependencies": { + "braces": "3.0.2", + "picomatch": "2.2.2" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "4.11.9", + "brorand": "1.1.0" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "node_modules/mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "node_modules/mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dependencies": { + "mime-db": "1.44.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "node_modules/mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "dependencies": { + "@babel/runtime": "7.12.1", + "tiny-warning": "1.0.3" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "dependencies": { + "loader-utils": "1.4.0", + "normalize-url": "1.9.1", + "schema-utils": "1.0.0", + "webpack-sources": "1.4.3" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/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==" + }, + "node_modules/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=" + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "1.1.11" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dependencies": { + "yallist": "4.0.0" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dependencies": { + "minipass": "3.1.3" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dependencies": { + "minipass": "3.1.3" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dependencies": { + "minipass": "3.1.3" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "3.1.3", + "yallist": "4.0.0" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dependencies": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.4", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.2.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "1.0.2", + "is-extendable": "1.0.1" + } + }, + "node_modules/mixin-deep/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "dependencies": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dependencies": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.5", + "rimraf": "2.7.1", + "run-queue": "1.0.3" + } + }, + "node_modules/move-concurrently/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dependencies": { + "dns-packet": "1.3.1", + "thunky": "1.1.0" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "fragment-cache": "0.2.1", + "is-windows": "1.0.2", + "kind-of": "6.0.3", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/nanomatch/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/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 + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", + "dependencies": { + "lower-case": "2.0.1", + "tslib": "1.14.1" + } + }, + "node_modules/node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "dependencies": { + "lodash.toarray": "^4.4.0" + } + }, + "node_modules/node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dependencies": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dependencies": { + "assert": "1.5.0", + "browserify-zlib": "0.2.0", + "buffer": "4.9.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.2.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.1", + "process": "0.11.10", + "punycode": "1.3.2", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.7", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.3.0", + "timers-browserify": "2.0.11", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.11.1", + "vm-browserify": "1.1.2" + } + }, + "node_modules/node-libs-browser/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/node-libs-browser/node_modules/readable-stream/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/node-releases": { + "version": "1.1.63", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", + "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dependencies": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "node_modules/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=", + "dependencies": { + "path-key": "2.0.1" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "1.0.0" + } + }, + "node_modules/null-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "dependencies": { + "loader-utils": "1.4.0", + "schema-utils": "1.0.0" + } + }, + "node_modules/null-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/null-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/null-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dependencies": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "node_modules/object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dependencies": { + "isobject": "3.0.1" + } + }, + "node_modules/object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1", + "has-symbols": "1.0.1", + "object-keys": "1.1.1" + } + }, + "node_modules/object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.entries/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + } + }, + "node_modules/object.getownpropertydescriptors/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dependencies": { + "isobject": "3.0.1" + } + }, + "node_modules/object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "function-bind": "1.1.1", + "has": "1.0.3" + } + }, + "node_modules/object.values/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1.0.2" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "2.1.0" + } + }, + "node_modules/open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "dependencies": { + "is-docker": "2.1.1", + "is-wsl": "2.2.0" + } + }, + "node_modules/opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dependencies": { + "is-wsl": "1.1.0" + } + }, + "node_modules/opn/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "node_modules/optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "dependencies": { + "cssnano": "4.1.10", + "last-call-webpack-plugin": "3.0.0" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dependencies": { + "url-parse": "1.4.7" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "node_modules/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=" + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "2.2.0" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "2.3.0" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dependencies": { + "aggregate-error": "3.1.0" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dependencies": { + "retry": "0.12.0" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "9.6.0", + "registry-auth-token": "4.2.0", + "registry-url": "5.1.0", + "semver": "6.3.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dependencies": { + "cyclist": "1.0.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7" + } + }, + "node_modules/parallel-transform/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/parallel-transform/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/param-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "dependencies": { + "dot-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "3.1.0" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "5.4.1", + "browserify-aes": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.1.1", + "safe-buffer": "5.1.2" + } + }, + "node_modules/parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "dependencies": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dependencies": { + "@babel/code-frame": "7.10.4", + "error-ex": "1.3.2", + "json-parse-even-better-errors": "2.3.1", + "lines-and-columns": "1.1.6" + } + }, + "node_modules/parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "node_modules/pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "dependencies": { + "no-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "node_modules/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=" + }, + "node_modules/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=" + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "node_modules/pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "dependencies": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "node_modules/picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dependencies": { + "pinkie": "2.0.4" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "3.0.0" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "dependencies": { + "find-up": "3.0.0" + } + }, + "node_modules/pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "dependencies": { + "ts-pnp": "1.2.0" + } + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dependencies": { + "async": "2.6.3", + "debug": "3.2.6", + "mkdirp": "0.5.5" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/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=" + }, + "node_modules/postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "dependencies": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "dependencies": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "dependencies": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dependencies": { + "browserslist": "4.14.5", + "color": "3.1.3", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dependencies": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + } + }, + "node_modules/postcss-custom-selectors/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dependencies": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dependencies": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-initial": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "dependencies": { + "lodash.template": "4.5.0", + "postcss": "7.0.35" + } + }, + "node_modules/postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "dependencies": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dependencies": { + "cosmiconfig": "5.2.1", + "import-cwd": "2.1.0" + } + }, + "node_modules/postcss-load-config/node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dependencies": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.14.0", + "parse-json": "4.0.0" + } + }, + "node_modules/postcss-load-config/node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dependencies": { + "caller-path": "2.0.0", + "resolve-from": "3.0.0" + } + }, + "node_modules/postcss-load-config/node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dependencies": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "node_modules/postcss-load-config/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dependencies": { + "loader-utils": "1.4.0", + "postcss": "7.0.35", + "postcss-load-config": "2.1.2", + "schema-utils": "1.0.0" + } + }, + "node_modules/postcss-loader/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/postcss-loader/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/postcss-loader/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "stylehacks": "4.0.3" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dependencies": { + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2", + "vendors": "1.0.4" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dependencies": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dependencies": { + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dependencies": { + "alphanum-sort": "1.0.2", + "browserslist": "4.14.5", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dependencies": { + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dependencies": { + "icss-utils": "4.1.1", + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4" + } + }, + "node_modules/postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dependencies": { + "icss-utils": "4.1.1", + "postcss": "7.0.35" + } + }, + "node_modules/postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dependencies": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dependencies": { + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dependencies": { + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dependencies": { + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dependencies": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dependencies": { + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dependencies": { + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-url/node_modules/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==" + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dependencies": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dependencies": { + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "dependencies": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "node_modules/postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "dependencies": { + "autoprefixer": "9.8.6", + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "css-blank-pseudo": "0.1.4", + "css-has-pseudo": "0.10.0", + "css-prefers-color-scheme": "3.1.1", + "cssdb": "4.4.0", + "postcss": "7.0.35", + "postcss-attribute-case-insensitive": "4.0.2", + "postcss-color-functional-notation": "2.0.1", + "postcss-color-gray": "5.0.0", + "postcss-color-hex-alpha": "5.0.3", + "postcss-color-mod-function": "3.0.3", + "postcss-color-rebeccapurple": "4.0.1", + "postcss-custom-media": "7.0.8", + "postcss-custom-properties": "8.0.11", + "postcss-custom-selectors": "5.1.2", + "postcss-dir-pseudo-class": "5.0.0", + "postcss-double-position-gradients": "1.0.0", + "postcss-env-function": "2.0.2", + "postcss-focus-visible": "4.0.0", + "postcss-focus-within": "3.0.0", + "postcss-font-variant": "4.0.0", + "postcss-gap-properties": "2.0.0", + "postcss-image-set-function": "3.0.1", + "postcss-initial": "3.0.2", + "postcss-lab-function": "2.0.1", + "postcss-logical": "3.0.0", + "postcss-media-minmax": "4.0.0", + "postcss-nesting": "7.0.1", + "postcss-overflow-shorthand": "2.0.0", + "postcss-page-break": "2.0.0", + "postcss-place": "4.0.1", + "postcss-pseudo-class-any-link": "6.0.0", + "postcss-replace-overflow-wrap": "3.0.0", + "postcss-selector-matches": "4.0.0", + "postcss-selector-not": "4.0.0" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "dependencies": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dependencies": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dependencies": { + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.35" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dependencies": { + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "dependencies": { + "postcss": "7.0.35" + } + }, + "node_modules/postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "dependencies": { + "balanced-match": "1.0.0", + "postcss": "7.0.35" + } + }, + "node_modules/postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "dependencies": { + "balanced-match": "1.0.0", + "postcss": "7.0.35" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "dependencies": { + "cssesc": "3.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dependencies": { + "is-svg": "3.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "svgo": "1.3.2" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dependencies": { + "alphanum-sort": "1.0.2", + "postcss": "7.0.35", + "uniqs": "2.0.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "dependencies": { + "flatten": "1.0.3", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/postcss/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/postcss/node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "3.0.0" + } + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/postcss/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "3.0.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "node_modules/prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dependencies": { + "lodash": "4.17.20", + "renderkid": "2.0.4" + } + }, + "node_modules/pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "node_modules/prism-react-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", + "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", + "peerDependencies": { + "react": ">=0.14.9" + } + }, + "node_modules/prismjs": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", + "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", + "dependencies": { + "clipboard": "^2.0.0" + }, + "optionalDependencies": { + "clipboard": "^2.0.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "dependencies": { + "asap": "~2.0.3" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "node_modules/prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dependencies": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" + } + }, + "node_modules/property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "dependencies": { + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dependencies": { + "forwarded": "0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "4.11.9", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.6", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "1.4.4", + "once": "1.4.0" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "3.7.1", + "inherits": "2.0.4", + "pump": "2.0.1" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "1.4.4", + "once": "1.4.0" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "node_modules/pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "dependencies": { + "escape-goat": "2.1.1" + } + }, + "node_modules/pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "node_modules/qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dependencies": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "node_modules/raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dependencies": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.5", + "strip-json-comments": "2.0.1" + } + }, + "node_modules/react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "dependencies": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" + } + }, + "node_modules/react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "dependencies": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "node_modules/react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "dependencies": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + }, + "peerDependencies": { + "react": "^15.3.0 || ^16.0.0" + } + }, + "node_modules/react-dev-utils": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", + "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", + "dependencies": { + "@babel/code-frame": "7.8.3", + "address": "1.1.2", + "browserslist": "4.10.0", + "chalk": "2.4.2", + "cross-spawn": "7.0.1", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.0.1", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "3.1.1", + "global-modules": "2.0.0", + "globby": "8.0.2", + "gzip-size": "5.1.1", + "immer": "1.10.0", + "inquirer": "7.0.4", + "is-root": "2.1.0", + "loader-utils": "1.2.3", + "open": "7.3.0", + "pkg-up": "3.1.0", + "react-error-overlay": "6.0.7", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + } + }, + "node_modules/react-dev-utils/node_modules/@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dependencies": { + "@babel/highlight": "7.10.4" + } + }, + "node_modules/react-dev-utils/node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "node_modules/react-dev-utils/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "1.0.3" + } + }, + "node_modules/react-dev-utils/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/react-dev-utils/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/react-dev-utils/node_modules/browserslist": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", + "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "dependencies": { + "caniuse-lite": "1.0.30001148", + "electron-to-chromium": "1.3.582", + "node-releases": "1.1.63", + "pkg-up": "3.1.0" + } + }, + "node_modules/react-dev-utils/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/react-dev-utils/node_modules/chalk/node_modules/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=" + }, + "node_modules/react-dev-utils/node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "node_modules/react-dev-utils/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "dependencies": { + "address": "1.1.2", + "debug": "2.6.9" + } + }, + "node_modules/react-dev-utils/node_modules/dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dependencies": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "node_modules/react-dev-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "node_modules/react-dev-utils/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/react-dev-utils/node_modules/extend-shallow/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/react-dev-utils/node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dependencies": { + "@mrmlnc/readdir-enhanced": "2.2.1", + "@nodelib/fs.stat": "1.1.3", + "glob-parent": "3.1.0", + "is-glob": "4.0.1", + "merge2": "1.4.1", + "micromatch": "3.1.10" + } + }, + "node_modules/react-dev-utils/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/react-dev-utils/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "node_modules/react-dev-utils/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "2.1.1" + } + }, + "node_modules/react-dev-utils/node_modules/globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "dependencies": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.2.7", + "glob": "7.1.6", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "node_modules/react-dev-utils/node_modules/inquirer": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "dependencies": { + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "cli-cursor": "3.1.0", + "cli-width": "2.2.1", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "5.2.0", + "through": "2.3.8" + } + }, + "node_modules/react-dev-utils/node_modules/inquirer/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "4.1.0" + } + }, + "node_modules/react-dev-utils/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/react-dev-utils/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/react-dev-utils/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "4.1.0" + } + }, + "node_modules/react-dev-utils/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/react-dev-utils/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "2.3.0" + } + }, + "node_modules/react-dev-utils/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "node_modules/react-dev-utils/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dependencies": { + "pify": "3.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "node_modules/react-dev-utils/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "node_modules/react-dev-utils/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" + } + }, + "node_modules/react-dev-utils/node_modules/strip-ansi/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "node_modules/react-dev-utils/node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "dependencies": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "scheduler": "0.19.1" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" + }, + "node_modules/react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "node_modules/react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "dependencies": { + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "react-fast-compare": "3.2.0", + "react-side-effect": "2.1.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-json-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", + "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "dependencies": { + "flux": "^3.1.3", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^6.1.0" + }, + "peerDependencies": { + "react": "^16.0.0 || ^15.5.4", + "react-dom": "^16.0.0 || ^15.5.4" + } + }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "node_modules/react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "dependencies": { + "prop-types": "15.7.2" + } + }, + "node_modules/react-loadable-ssr-addon": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", + "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", + "dependencies": { + "@babel/runtime": "7.12.1" + } + }, + "node_modules/react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "dependencies": { + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "hoist-non-react-statics": "3.3.2", + "loose-envify": "1.4.0", + "mini-create-react-context": "0.4.0", + "path-to-regexp": "1.8.0", + "prop-types": "15.7.2", + "react-is": "16.13.1", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" + } + }, + "node_modules/react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "dependencies": { + "@babel/runtime": "7.12.1" + } + }, + "node_modules/react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "dependencies": { + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "loose-envify": "1.4.0", + "prop-types": "15.7.2", + "react-router": "5.2.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" + } + }, + "node_modules/react-router/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/react-router/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/react-side-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", + "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" + }, + "node_modules/react-textarea-autosize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", + "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "dependencies": { + "prop-types": "^15.6.0" + }, + "peerDependencies": { + "react": ">=0.14.0 <17.0.0" + } + }, + "node_modules/react-toastify": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", + "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", + "dependencies": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/react-toggle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", + "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", + "dependencies": { + "classnames": "^2.2.5" + }, + "peerDependencies": { + "prop-types": "^15.3.0 || ^16.0.0", + "react": "^15.3.0 || ^16.0.0", + "react-dom": "^15.3.0 || ^16.0.0" + } + }, + "node_modules/react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "dependencies": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": ">=16.6.0", + "react-dom": ">=16.6.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" + } + }, + "node_modules/readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "dependencies": { + "picomatch": "2.2.2" + } + }, + "node_modules/reading-time": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", + "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" + }, + "node_modules/rebass": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/rebass/-/rebass-4.0.7.tgz", + "integrity": "sha512-GJot6j6Qcr7jk1QIgf9qBoud75CGRpN8pGcEo98TSp4KNSWV01ZLvGwFKGI35oEBuNs+lpEd3+pnwkQUTSFytg==", + "dev": true, + "optional": true, + "dependencies": { + "reflexbox": "^4.0.6" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dependencies": { + "resolve": "1.17.0" + } + }, + "node_modules/recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "dependencies": { + "minimatch": "3.0.4" + } + }, + "node_modules/reflexbox": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/reflexbox/-/reflexbox-4.0.6.tgz", + "integrity": "sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==", + "dev": true, + "optional": true, + "dependencies": { + "@emotion/core": "^10.0.0", + "@emotion/styled": "^10.0.0", + "@styled-system/css": "^5.0.0", + "@styled-system/should-forward-prop": "^5.0.0", + "styled-system": "^5.0.0" + }, + "peerDependencies": { + "react": "^16.8.6" + } + }, + "node_modules/regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "node_modules/regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dependencies": { + "regenerate": "1.4.1" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "node_modules/regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dependencies": { + "@babel/runtime": "7.12.1" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/regex-not/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + } + }, + "node_modules/regexp.prototype.flags/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dependencies": { + "regenerate": "1.4.1", + "regenerate-unicode-properties": "8.2.0", + "regjsgen": "0.5.2", + "regjsparser": "0.6.4", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.2.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "dependencies": { + "rc": "1.2.8" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "1.2.8" + } + }, + "node_modules/regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "node_modules/regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dependencies": { + "jsesc": "0.5.0" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + }, + "node_modules/rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "dependencies": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "dependencies": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-parse/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "node_modules/remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "dependencies": { + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" + } + }, + "node_modules/remark-admonitions/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/remark-admonitions/node_modules/unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-emoji": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", + "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", + "dependencies": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.2" + } + }, + "node_modules/remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", + "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", + "dependencies": { + "@babel/core": "7.11.6", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.11.0", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.19", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "dependencies": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "dependencies": { + "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "dev": true, + "dependencies": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/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=" + }, + "node_modules/renderkid": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", + "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "dependencies": { + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.10.1", + "lodash": "4.17.20", + "strip-ansi": "3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "2.1.1" + } + }, + "node_modules/repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "node_modules/replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "node_modules/require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dependencies": { + "path-parse": "1.0.6" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dependencies": { + "resolve-from": "3.0.0" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + }, + "node_modules/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==" + }, + "node_modules/resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "1.0.1" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "5.1.2", + "signal-exit": "3.0.3" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "7.1.6" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "3.1.0", + "inherits": "2.0.4" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "node_modules/run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dependencies": { + "aproba": "1.2.0" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + }, + "node_modules/rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "dependencies": { + "tslib": "1.14.1" + } + }, + "node_modules/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==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dependencies": { + "ret": "0.1.15" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dependencies": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dependencies": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "dependencies": { + "extend-shallow": "2.0.1", + "kind-of": "6.0.3" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "node_modules/selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "dependencies": { + "node-forge": "0.10.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "6.3.0" + } + }, + "node_modules/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dependencies": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "2.3.0", + "range-parser": "1.2.1", + "statuses": "1.5.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/send/node_modules/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==" + }, + "node_modules/serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dependencies": { + "randombytes": "2.1.0" + } + }, + "node_modules/serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "dependencies": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + } + }, + "node_modules/serve-handler/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "node_modules/serve-handler/node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "node_modules/serve-handler/node_modules/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==" + }, + "node_modules/serve-handler/node_modules/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==", + "dependencies": { + "mime-db": "1.33.0" + } + }, + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-handler/node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dependencies": { + "accepts": "1.3.7", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.27", + "parseurl": "1.3.3" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dependencies": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dependencies": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", + "send": "0.17.1" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "node_modules/setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "node_modules/shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "dependencies": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + } + }, + "node_modules/shallow-clone/node_modules/kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/shallow-clone/node_modules/lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "3.0.0" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "node_modules/shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dependencies": { + "glob": "7.1.6", + "interpret": "1.4.0", + "rechoir": "0.6.2" + } + }, + "node_modules/side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "dev": true, + "dependencies": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dependencies": { + "is-arrayish": "0.3.2" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sitemap": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", + "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", + "dependencies": { + "lodash.chunk": "^4.2.0", + "lodash.padstart": "^4.6.1", + "whatwg-url": "^7.0.0", + "xmlbuilder": "^13.0.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=4.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.3", + "use": "3.1.1" + } + }, + "node_modules/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==", + "dependencies": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "snapdragon-util": "3.0.1" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dependencies": { + "is-descriptor": "1.0.2" + } + }, + "node_modules/snapdragon-node/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/snapdragon-node/node_modules/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==", + "dependencies": { + "kind-of": "6.0.3" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/snapdragon/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } + }, + "node_modules/snapdragon/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "dependencies": { + "faye-websocket": "0.10.0", + "uuid": "3.4.0", + "websocket-driver": "0.6.5" + } + }, + "node_modules/sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "dependencies": { + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.3", + "inherits": "2.0.4", + "json3": "3.3.3", + "url-parse": "1.4.7" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dependencies": { + "ms": "2.1.2" + } + }, + "node_modules/sockjs-client/node_modules/faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "dependencies": { + "websocket-driver": "0.6.5" + } + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dependencies": { + "is-plain-obj": "1.1.0" + } + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dependencies": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dependencies": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/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=" + }, + "node_modules/space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dependencies": { + "debug": "4.2.0", + "handle-thing": "2.0.1", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dependencies": { + "debug": "4.2.0", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.6.0", + "wbuf": "1.7.3" + } + }, + "node_modules/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==", + "dependencies": { + "extend-shallow": "3.0.2" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/split-string/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "node_modules/ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "dependencies": { + "minipass": "3.1.3" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "node_modules/state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dependencies": { + "define-property": "0.2.5", + "object-copy": "0.1.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dependencies": { + "is-descriptor": "0.1.6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "node_modules/std-env": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "dependencies": { + "ci-info": "1.6.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dependencies": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + } + }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/stream-browserify/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dependencies": { + "end-of-stream": "1.4.4", + "stream-shift": "1.0.1" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.2" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/stream-http/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "5.2.1" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dependencies": { + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.matchall/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + } + }, + "node_modules/string.prototype.trimend/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + } + }, + "node_modules/string.prototype.trimstart/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, + "dependencies": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "4.1.0" + } + }, + "node_modules/strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/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=" + }, + "node_modules/style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "dependencies": { + "inline-style-parser": "0.1.1" + } + }, + "node_modules/styled-system": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", + "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", + "dev": true, + "optional": true, + "dependencies": { + "@styled-system/background": "^5.1.2", + "@styled-system/border": "^5.1.5", + "@styled-system/color": "^5.1.2", + "@styled-system/core": "^5.1.2", + "@styled-system/flexbox": "^5.1.2", + "@styled-system/grid": "^5.1.2", + "@styled-system/layout": "^5.1.2", + "@styled-system/position": "^5.1.2", + "@styled-system/shadow": "^5.1.2", + "@styled-system/space": "^5.1.2", + "@styled-system/typography": "^5.1.2", + "@styled-system/variant": "^5.1.5", + "object-assign": "^4.1.1" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dependencies": { + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dependencies": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "3.0.0" + } + }, + "node_modules/svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dependencies": { + "chalk": "2.4.2", + "coa": "2.0.2", + "css-select": "2.1.0", + "css-select-base-adapter": "0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "4.0.3", + "js-yaml": "3.14.0", + "mkdirp": "0.5.5", + "object.values": "1.1.1", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.1" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "1.0.0", + "css-what": "3.4.2", + "domutils": "1.7.0", + "nth-check": "1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" + } + }, + "node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "node_modules/tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "dependencies": { + "chownr": "2.0.0", + "fs-minipass": "2.1.0", + "minipass": "3.1.3", + "minizlib": "2.1.2", + "mkdirp": "1.0.4", + "yallist": "4.0.0" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "node_modules/term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dependencies": { + "commander": "2.20.3", + "source-map": "0.6.1", + "source-map-support": "0.5.19" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "dependencies": { + "cacache": "15.0.5", + "find-cache-dir": "3.3.1", + "jest-worker": "26.5.0", + "p-limit": "3.0.2", + "schema-utils": "3.0.0", + "serialize-javascript": "5.0.1", + "source-map": "0.6.1", + "terser": "5.3.6", + "webpack-sources": "1.4.3" + } + }, + "node_modules/terser-webpack-plugin/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser-webpack-plugin/node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dependencies": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "4.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "6.3.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "dependencies": { + "p-try": "2.2.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "2.3.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/p-locate/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "2.2.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "node_modules/terser-webpack-plugin/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "4.1.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dependencies": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", + "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", + "dependencies": { + "commander": "2.20.3", + "source-map": "0.7.3", + "source-map-support": "0.5.19" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser/node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "2.3.7", + "xtend": "4.0.2" + } + }, + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/through2/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "node_modules/timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "dependencies": { + "setimmediate": "1.0.5" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "node_modules/tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "1.0.2" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "node_modules/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=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "7.0.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/to-regex/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "node_modules/toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tr46/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "node_modules/trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "node_modules/ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "2.1.27" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "1.0.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==", + "engines": { + "node": "*" + } + }, + "node_modules/unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dependencies": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dependencies": { + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.1.0" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "2.0.2" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "0.1.4" + } + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "2.0.0" + } + }, + "node_modules/unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-generated": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", + "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", + "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", + "dependencies": { + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "dependencies": { + "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dependencies": { + "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dependencies": { + "has-value": "0.3.1", + "isobject": "3.0.1" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dependencies": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dependencies": { + "isarray": "1.0.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "node_modules/update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "dependencies": { + "boxen": "4.2.0", + "chalk": "3.0.0", + "configstore": "5.0.1", + "has-yarn": "2.1.0", + "import-lazy": "2.1.0", + "is-ci": "2.0.0", + "is-installed-globally": "0.3.2", + "is-npm": "4.0.0", + "is-yarn-global": "0.3.0", + "latest-version": "5.1.0", + "pupa": "2.0.1", + "semver-diff": "3.1.1", + "xdg-basedir": "4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "dependencies": { + "punycode": "2.1.1" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "dependencies": { + "loader-utils": "2.0.0", + "mime-types": "2.1.27", + "schema-utils": "3.0.0" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "dependencies": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "dependencies": { + "querystringify": "2.2.0", + "requires-port": "1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "2.0.0" + } + }, + "node_modules/url-parse-lax/node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "has-symbols": "1.0.1", + "object.getownpropertydescriptors": "2.1.0" + } + }, + "node_modules/util.promisify/node_modules/es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dependencies": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "node_modules/v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "node_modules/value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "node_modules/vfile": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-location": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", + "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "engines": { + "node": ">=4" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/wait-file": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", + "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", + "dependencies": { + "@hapi/joi": "15.1.1", + "fs-extra": "8.1.0", + "rx": "4.1.0" + } + }, + "node_modules/wait-file/node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "node_modules/wait-file/node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "node_modules/wait-file/node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dependencies": { + "@hapi/address": "2.1.4", + "@hapi/bourne": "1.3.2", + "@hapi/hoek": "8.5.1", + "@hapi/topo": "3.1.6" + } + }, + "node_modules/wait-file/node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dependencies": { + "@hapi/hoek": "8.5.1" + } + }, + "node_modules/watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "dependencies": { + "chokidar": "3.4.3", + "graceful-fs": "4.2.4", + "neo-async": "2.6.2", + "watchpack-chokidar2": "2.0.0" + }, + "optionalDependencies": { + "watchpack-chokidar2": "2.0.0" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "optional": true, + "dependencies": { + "chokidar": "2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "dependencies": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "dependencies": { + "remove-trailing-separator": "1.1.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "node_modules/watchpack-chokidar2/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "optional": true, + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "dependencies": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.13", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "optional": true, + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/extend-shallow/node_modules/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==", + "optional": true, + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "optional": true, + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "dependencies": { + "bindings": "1.5.0", + "nan": "2.14.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "dependencies": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "dependencies": { + "is-extglob": "2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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=", + "optional": true, + "dependencies": { + "binary-extensions": "1.13.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "optional": true, + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/watchpack-chokidar2/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "optional": true, + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "dependencies": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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==", + "optional": true, + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/watchpack-chokidar2/node_modules/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=", + "optional": true, + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dependencies": { + "minimalistic-assert": "1.0.1" + } + }, + "node_modules/web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "6.4.2", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2", + "chrome-trace-event": "1.0.2", + "enhanced-resolve": "4.3.0", + "eslint-scope": "4.0.3", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.4.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.5", + "neo-async": "2.6.2", + "node-libs-browser": "2.2.1", + "schema-utils": "1.0.0", + "tapable": "1.1.3", + "terser-webpack-plugin": "1.4.5", + "watchpack": "1.7.4", + "webpack-sources": "1.4.3" + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dependencies": { + "acorn": "7.4.0", + "acorn-walk": "7.2.0", + "bfj": "6.1.2", + "chalk": "2.4.2", + "commander": "2.20.3", + "ejs": "2.7.4", + "express": "4.17.1", + "filesize": "3.6.1", + "gzip-size": "5.1.1", + "lodash": "4.17.20", + "mkdirp": "0.5.5", + "opener": "1.5.1", + "ws": "6.2.1" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" + }, + "node_modules/webpack-bundle-analyzer/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/webpack-bundle-analyzer/node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "dependencies": { + "memory-fs": "0.4.1", + "mime": "2.4.6", + "mkdirp": "0.5.5", + "range-parser": "1.2.1", + "webpack-log": "2.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + }, + "node_modules/webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "dependencies": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.1.8", + "compression": "1.7.4", + "connect-history-api-fallback": "1.6.0", + "debug": "4.2.0", + "del": "4.1.1", + "express": "4.17.1", + "html-entities": "1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "2.0.0", + "internal-ip": "4.3.0", + "ip": "1.1.5", + "is-absolute-url": "3.0.3", + "killable": "1.0.1", + "loglevel": "1.7.0", + "opn": "5.5.0", + "p-retry": "3.0.1", + "portfinder": "1.0.28", + "schema-utils": "1.0.0", + "selfsigned": "1.10.8", + "semver": "6.3.0", + "serve-index": "1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "4.0.2", + "strip-ansi": "3.0.1", + "supports-color": "6.1.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.7.2", + "webpack-log": "2.0.0", + "ws": "6.2.1", + "yargs": "13.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dependencies": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dependencies": { + "remove-trailing-separator": "1.1.0" + } + }, + "node_modules/webpack-dev-server/node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dependencies": { + "array-uniq": "1.0.3" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "node_modules/webpack-dev-server/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/webpack-dev-server/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dependencies": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.13", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + }, + "optionalDependencies": { + "fsevents": "1.2.13" + } + }, + "node_modules/webpack-dev-server/node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dependencies": { + "@types/glob": "7.1.3", + "globby": "6.1.0", + "is-path-cwd": "2.2.0", + "is-path-in-cwd": "2.1.0", + "p-map": "2.1.0", + "pify": "4.0.1", + "rimraf": "2.7.1" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/webpack-dev-server/node_modules/extend-shallow/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "dependencies": { + "bindings": "1.5.0", + "nan": "2.14.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dependencies": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dependencies": { + "is-extglob": "2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dependencies": { + "array-union": "1.0.2", + "glob": "7.1.6", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "node_modules/webpack-dev-server/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "node_modules/webpack-dev-server/node_modules/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=", + "dependencies": { + "binary-extensions": "1.13.1" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/webpack-dev-server/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/webpack-dev-server/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/webpack-dev-server/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "node_modules/webpack-dev-server/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dependencies": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" + } + }, + "node_modules/webpack-dev-server/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/webpack-dev-server/node_modules/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==", + "dependencies": { + "safe-buffer": "5.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dependencies": { + "ansi-regex": "2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dependencies": { + "has-flag": "3.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dependencies": { + "ansi-colors": "3.2.4", + "uuid": "3.4.0" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dependencies": { + "lodash": "4.17.20" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "2.0.1", + "source-map": "0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/webpack/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "1.1.0", + "array-unique": "0.3.2", + "extend-shallow": "2.0.1", + "fill-range": "4.0.0", + "isobject": "3.0.1", + "repeat-element": "1.1.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + } + }, + "node_modules/webpack/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/webpack/node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dependencies": { + "bluebird": "3.7.2", + "chownr": "1.1.4", + "figgy-pudding": "3.5.2", + "glob": "7.1.6", + "graceful-fs": "4.2.4", + "infer-owner": "1.0.4", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.5", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.7.1", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "node_modules/webpack/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/webpack/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dependencies": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "node_modules/webpack/node_modules/extend-shallow/node_modules/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==", + "dependencies": { + "is-plain-object": "2.0.4" + } + }, + "node_modules/webpack/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dependencies": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + } + }, + "node_modules/webpack/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dependencies": { + "is-extendable": "0.1.1" + } + }, + "node_modules/webpack/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dependencies": { + "kind-of": "3.2.2" + } + }, + "node_modules/webpack/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dependencies": { + "is-buffer": "1.1.6" + } + }, + "node_modules/webpack/node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "node_modules/webpack/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "1.2.5" + } + }, + "node_modules/webpack/node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "node_modules/webpack/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "3.1.1" + } + }, + "node_modules/webpack/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "node_modules/webpack/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "7.1.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "node_modules/webpack/node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "2.1.0" + } + }, + "node_modules/webpack/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "node_modules/webpack/node_modules/ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dependencies": { + "figgy-pudding": "3.5.2" + } + }, + "node_modules/webpack/node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dependencies": { + "cacache": "12.0.4", + "find-cache-dir": "2.1.0", + "is-wsl": "1.1.0", + "schema-utils": "1.0.0", + "serialize-javascript": "4.0.0", + "source-map": "0.6.1", + "terser": "4.8.0", + "webpack-sources": "1.4.3", + "worker-farm": "1.7.0" + } + }, + "node_modules/webpack/node_modules/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=", + "dependencies": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "node_modules/webpack/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/webpackbar": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", + "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", + "dependencies": { + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "consola": "2.15.0", + "figures": "3.2.0", + "pretty-time": "1.1.0", + "std-env": "2.2.1", + "text-table": "0.2.0", + "wrap-ansi": "6.2.0" + } + }, + "node_modules/webpackbar/node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "node_modules/webpackbar/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "node_modules/webpackbar/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "1.1.4" + } + }, + "node_modules/webpackbar/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/webpackbar/node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dependencies": { + "ansi-regex": "5.0.0" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "4.3.0", + "string-width": "4.2.0", + "strip-ansi": "6.0.0" + } + }, + "node_modules/webpackbar/node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "2.0.1" + } + }, + "node_modules/websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "dependencies": { + "websocket-extensions": "0.1.4" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "node_modules/whatwg-fetch": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" + }, + "node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "2.0.0" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "4.2.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dependencies": { + "errno": "0.1.7" + } + }, + "node_modules/worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "dependencies": { + "microevent.ts": "0.1.1" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dependencies": { + "ansi-styles": "3.2.1", + "string-width": "3.1.0", + "strip-ansi": "5.2.0" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "0.1.4", + "is-typedarray": "1.0.0", + "signal-exit": "3.0.3", + "typedarray-to-buffer": "3.1.5" + } + }, + "node_modules/ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "dependencies": { + "async-limiter": "1.0.1" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "node_modules/xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "dependencies": { + "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" + } + }, + "node_modules/xmlbuilder": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "node_modules/y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dependencies": { + "cliui": "5.0.0", + "find-up": "3.0.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "3.1.0", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dependencies": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" + } + }, + "node_modules/yargs-parser/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + }, + "node_modules/zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@algolia/cache-browser-local-storage": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.5.1.tgz", + "integrity": "sha512-TAQHRHaCUAR0bNhUHG0CnO6FTx3EMPwZQrjPuNS6kHvCQ/H8dVD0sLsHyM8C7U4j33xPQCWi9TBnSx8cYXNmNw==", + "requires": { + "@algolia/cache-common": "4.5.1" + } + }, + "@algolia/cache-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.5.1.tgz", + "integrity": "sha512-Sux+pcedQi9sfScIiQdl6pEaTVl712qM9OblvDhnaeF1v6lf4jyTlRTiBLP7YBLuvO1Yo54W3maf03kmz9PVhA==" + }, + "@algolia/cache-in-memory": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.5.1.tgz", + "integrity": "sha512-fzwAtBFwveuG+E5T/namChEIvdVl0DoV3djV1C078b/JpO5+DeAwuXIJGYbyl950u170n5NEYuIwYG+R6h4lJQ==", + "requires": { + "@algolia/cache-common": "4.5.1" + } + }, + "@algolia/client-account": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.5.1.tgz", + "integrity": "sha512-2WFEaI7Zf4ljnBsSAS4e+YylZ5glovm78xFg4E1JKA8PE6M+TeIgUY6HO2ouLh2dqQKxc9UfdAT1Loo/dha2iQ==", + "requires": { + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "@algolia/client-analytics": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.5.1.tgz", + "integrity": "sha512-bTmZUU8zhZMWBeGEQ/TVqLoL3OOT0benU0HtS3iOnQURwb+AOCv3RsgZvkj2djp+M24Q6P8/L34uBJMmCurbLg==", + "requires": { + "@algolia/client-common": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "@algolia/client-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.5.1.tgz", + "integrity": "sha512-5CpIf8IK1hke7q+N4e+A4TWdFXVJ5Qwyaa0xS84DrDO8HQ7vfYbDvG1oYa9hVEtGn6c3WVKPAvuWynK+fXQQCA==", + "requires": { + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "@algolia/client-recommendation": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-recommendation/-/client-recommendation-4.5.1.tgz", + "integrity": "sha512-GiFrNSImoEBUQICjFBEoxPGzrjWji8PY9GeMg2CNvOYcRQ0Xt0Y36v9GN53NLjvB7QdQ2FlE1Cuv/PLUfS/aQQ==", + "requires": { + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "@algolia/client-search": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.5.1.tgz", + "integrity": "sha512-wjuOTte9Auo9Cg4fL0709PjeJ9rXFh4okYUrOt/2SWqQid6DSdZOp+BtyaHKV3E94sj+SlmMxkMUacYluYg5zA==", + "requires": { + "@algolia/client-common": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "@algolia/logger-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.5.1.tgz", + "integrity": "sha512-ZoVnGriinlLHlkvn5K7djOUn1/1IeTjU8rDzOJ3t06T+2hQytgJghaX7rSwKIeH4CjWMy61w8jLisuGJRBOEeg==" + }, + "@algolia/logger-console": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.5.1.tgz", + "integrity": "sha512-1qa7K18+uAgxyWuguayaDS5ViiZFcOjI3J5ACBb0i/n7RsXUo149lP6mwmx6TIU7s135hT0f0TCqnvfMvN1ilA==", + "requires": { + "@algolia/logger-common": "4.5.1" + } + }, + "@algolia/requester-browser-xhr": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.5.1.tgz", + "integrity": "sha512-tsQz+9pZw9dwPm/wMvZDpsWFZgmghLjXi4c3O4rfwoP/Ikum5fhle5fiR14yb4Lw4WlOQ1AJIHJvrg1qLIG8hQ==", + "requires": { + "@algolia/requester-common": "4.5.1" + } + }, + "@algolia/requester-common": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.5.1.tgz", + "integrity": "sha512-bPCiLvhHKXaka7f5FLtheChToz0yHVhvza64naFJRRh/3kC0nvyrvQ0ogjiydiSrGIfdNDyyTVfKGdk4gS5gyA==" + }, + "@algolia/requester-node-http": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.5.1.tgz", + "integrity": "sha512-BfFc2h9eQOKu1gGs3DtQO7GrVZW/rxUgpJVLja4UVQyGplJyTCrFgkTyfl+8rb3MkNgA/S2LNo7cKNSPfpqeAQ==", + "requires": { + "@algolia/requester-common": "4.5.1" + } + }, + "@algolia/transporter": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.5.1.tgz", + "integrity": "sha512-asPDNToDAPhH0tM6qKGTn1l0wTlNUbekpa1ifZ6v+qhSjo3VdqGyp+2VeciJOBW/wVHXh3HUbAcycvLERRlCLg==", + "requires": { + "@algolia/cache-common": "4.5.1", + "@algolia/logger-common": "4.5.1", + "@algolia/requester-common": "4.5.1" + } + }, + "@babel/code-frame": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", + "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", + "requires": { + "@babel/highlight": "7.10.4" + } + }, + "@babel/compat-data": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.12.1.tgz", + "integrity": "sha512-725AQupWJZ8ba0jbKceeFblZTY90McUBWMwHhkFQ9q1zKPJ95GUktljFcgcsIVwRnTnRKlcYzfiNImg5G9m6ZQ==" + }, + "@babel/core": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", + "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", + "requires": { + "@babel/code-frame": "7.10.4", + "@babel/generator": "7.12.1", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helpers": "7.12.1", + "@babel/parser": "7.12.3", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1", + "convert-source-map": "1.7.0", + "debug": "4.2.0", + "gensync": "1.0.0-beta.1", + "json5": "2.1.3", + "lodash": "4.17.20", + "resolve": "1.17.0", + "semver": "5.7.1", + "source-map": "0.5.7" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.12.1.tgz", + "integrity": "sha512-DB+6rafIdc9o72Yc3/Ph5h+6hUjeOp66pF0naQBgUFFuPqzQwIlPTm3xZR7YNvduIMtkDIj2t21LSQwnbCrXvg==", + "requires": { + "@babel/types": "7.12.1", + "jsesc": "2.5.2", + "source-map": "0.5.7" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz", + "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz", + "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==", + "requires": { + "@babel/helper-explode-assignable-expression": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz", + "integrity": "sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.1.tgz", + "integrity": "sha512-82to8lR7TofZWbTd3IEZT1xNHfeU/Ef4rDm/GLXddzqDh+yQ19QuGSzqww51aNxVH8rwfRIzL0EUQsvODVhtyw==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-module-imports": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.1.tgz", + "integrity": "sha512-jtBEif7jsPwP27GPHs06v4WBV0KrE8a/P7n0N0sSvHn2hwUCYnolP/CLmz51IzAW4NlN+HuoBtb9QcwnRo9F/g==", + "requires": { + "@babel/compat-data": "7.12.1", + "@babel/helper-validator-option": "7.12.1", + "browserslist": "4.14.5", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz", + "integrity": "sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz", + "integrity": "sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-regex": "7.10.5", + "regexpu-core": "4.7.1" + } + }, + "@babel/helper-define-map": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz", + "integrity": "sha512-fMw4kgFB720aQFXSVaXr79pjjcW5puTCM16+rECJ/plGS+zByelE8l9nCpV1GibxTnFVmUuYG9U8wYfQHdzOEQ==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.12.1.tgz", + "integrity": "sha512-dmUwH8XmlrUpVqgtZ737tK88v07l840z9j3OEhCLwKTkjlvKpfqXVIZ0wpK3aeOxspwGrf/5AP5qLx4rO3w5rA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-function-name": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz", + "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==", + "requires": { + "@babel/helper-get-function-arity": "7.10.4", + "@babel/template": "7.10.4", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz", + "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz", + "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz", + "integrity": "sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-module-imports": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz", + "integrity": "sha512-ZeC1TlMSvikvJNy1v/wPIazCu3NdOwgYZLIkmIyAsGhqkNpiDoQQRmaCK8YP4Pq3GPTLPV9WXaPCJKvx06JxKA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-module-transforms": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz", + "integrity": "sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-simple-access": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/helper-validator-identifier": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1", + "lodash": "4.17.20" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz", + "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "@babel/helper-regex": { + "version": "7.10.5", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.5.tgz", + "integrity": "sha512-68kdUAzDrljqBrio7DYAEgCoJHxppJOERHOgOrDN7WjOzP0ZQ1LsSDRXcemzVZaLvjaJsJEESb6qt+znNuENDg==", + "requires": { + "lodash": "4.17.20" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz", + "integrity": "sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-wrap-function": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-replace-supers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.12.1.tgz", + "integrity": "sha512-zJjTvtNJnCFsCXVi5rUInstLd/EIVNmIKA1Q9ynESmMBWPWd+7sdR+G4/wdu+Mppfep0XLyG2m7EBPvjCeFyrw==", + "requires": { + "@babel/helper-member-expression-to-functions": "7.12.1", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helper-simple-access": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz", + "integrity": "sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz", + "integrity": "sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz", + "integrity": "sha512-74Vejvp6mHkGE+m+k5vHY93FX2cAtrw1zXrZXRlG4l410Nm9PxfEiVTn1PjDPV5SnmieiueY4AFg2xqhNFuuZg==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", + "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==" + }, + "@babel/helper-validator-option": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz", + "integrity": "sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A==" + }, + "@babel/helper-wrap-function": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.12.3.tgz", + "integrity": "sha512-Cvb8IuJDln3rs6tzjW3Y8UeelAOdnpB8xtQ4sme2MSZ9wOxrbThporC0y/EtE16VAtoyEfLM404Xr1e0OOp+ow==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/helpers": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.12.1.tgz", + "integrity": "sha512-9JoDSBGoWtmbay98efmT2+mySkwjzeFeAL9BuWNoVQpkPFQF8SIIFUfY5os9u8wVzglzoiPRSW7cuJmBDUt43g==", + "requires": { + "@babel/template": "7.10.4", + "@babel/traverse": "7.12.1", + "@babel/types": "7.12.1" + } + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "requires": { + "@babel/helper-validator-identifier": "7.10.4", + "chalk": "2.4.2", + "js-tokens": "4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.3.tgz", + "integrity": "sha512-kFsOS0IbsuhO5ojF8Hc8z/8vEIOkylVBrjiZUbLTE3XFe0Qi+uu6HjzQixkFaqr0ZPAMZcBVxEwmsnsLPZ2Xsw==" + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz", + "integrity": "sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz", + "integrity": "sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz", + "integrity": "sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-dynamic-import": "7.8.3" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz", + "integrity": "sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-export-namespace-from": "7.8.3" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz", + "integrity": "sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-json-strings": "7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz", + "integrity": "sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz", + "integrity": "sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.1.tgz", + "integrity": "sha512-MR7Ok+Af3OhNTCxYVjJZHS0t97ydnJZt/DbR4WISO39iDnhiD8XHrY12xuSJ90FFEGjir0Fzyyn7g/zY6hxbxA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-numeric-separator": "7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-transform-parameters": "7.12.1" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz", + "integrity": "sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz", + "integrity": "sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1", + "@babel/plugin-syntax-optional-chaining": "7.8.3" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz", + "integrity": "sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz", + "integrity": "sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz", + "integrity": "sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz", + "integrity": "sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.12.1.tgz", + "integrity": "sha512-UZNEcCY+4Dp9yYRCAHrHDU+9ZXLYaY9MgBXSRLkB9WjYFRR6quJBumfVrEkUxrePPBwFcpWfNKXqVRQQtm7mMA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz", + "integrity": "sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz", + "integrity": "sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-remap-async-to-generator": "7.12.1" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz", + "integrity": "sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz", + "integrity": "sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz", + "integrity": "sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-define-map": "7.10.5", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-optimise-call-expression": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1", + "@babel/helper-split-export-declaration": "7.11.0", + "globals": "11.12.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz", + "integrity": "sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz", + "integrity": "sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz", + "integrity": "sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz", + "integrity": "sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz", + "integrity": "sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug==", + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz", + "integrity": "sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz", + "integrity": "sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw==", + "requires": { + "@babel/helper-function-name": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz", + "integrity": "sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz", + "integrity": "sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz", + "integrity": "sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz", + "integrity": "sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-simple-access": "7.12.1", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz", + "integrity": "sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q==", + "requires": { + "@babel/helper-hoist-variables": "7.10.4", + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-identifier": "7.10.4", + "babel-plugin-dynamic-import-node": "2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz", + "integrity": "sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q==", + "requires": { + "@babel/helper-module-transforms": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz", + "integrity": "sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz", + "integrity": "sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz", + "integrity": "sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-replace-supers": "7.12.1" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz", + "integrity": "sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz", + "integrity": "sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-constant-elements": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz", + "integrity": "sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz", + "integrity": "sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.1.tgz", + "integrity": "sha512-RmKejwnT0T0QzQUzcbP5p1VWlpnP8QHtdhEtLG55ZDQnJNalbF3eeDyu3dnGKvGzFIQiBzFhBYTwvv435p9Xpw==", + "requires": { + "@babel/helper-builder-react-jsx": "7.10.4", + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.1.tgz", + "integrity": "sha512-IilcGWdN1yNgEGOrB96jbTplRh+V2Pz1EoEwsKsHfX1a/L40cUYuD71Zepa7C+ujv7kJIxnDftWeZbKNEqZjCQ==", + "requires": { + "@babel/helper-builder-react-jsx-experimental": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-jsx": "7.12.1" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz", + "integrity": "sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz", + "integrity": "sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz", + "integrity": "sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg==", + "requires": { + "@babel/helper-annotate-as-pure": "7.10.4", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz", + "integrity": "sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng==", + "requires": { + "regenerator-transform": "0.14.5" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz", + "integrity": "sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.12.1.tgz", + "integrity": "sha512-Ac/H6G9FEIkS2tXsZjL4RAdS3L3WHxci0usAnz7laPWUmFiGtj7tIASChqKZMHTSQTQY6xDbOq+V1/vIq3QrWg==", + "requires": { + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "resolve": "1.17.0", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz", + "integrity": "sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz", + "integrity": "sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-skip-transparent-expression-wrappers": "7.12.1" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz", + "integrity": "sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-regex": "7.10.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz", + "integrity": "sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz", + "integrity": "sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.12.1.tgz", + "integrity": "sha512-VrsBByqAIntM+EYMqSm59SiMEf7qkmI9dqMt6RbD/wlwueWmYcI0FFK5Fj47pP6DRZm+3teXjosKlwcZJ5lIMw==", + "requires": { + "@babel/helper-create-class-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-syntax-typescript": "7.12.1" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz", + "integrity": "sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz", + "integrity": "sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg==", + "requires": { + "@babel/helper-create-regexp-features-plugin": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "@babel/preset-env": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.12.1.tgz", + "integrity": "sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg==", + "requires": { + "@babel/compat-data": "7.12.1", + "@babel/helper-compilation-targets": "7.12.1", + "@babel/helper-module-imports": "7.12.1", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/helper-validator-option": "7.12.1", + "@babel/plugin-proposal-async-generator-functions": "7.12.1", + "@babel/plugin-proposal-class-properties": "7.12.1", + "@babel/plugin-proposal-dynamic-import": "7.12.1", + "@babel/plugin-proposal-export-namespace-from": "7.12.1", + "@babel/plugin-proposal-json-strings": "7.12.1", + "@babel/plugin-proposal-logical-assignment-operators": "7.12.1", + "@babel/plugin-proposal-nullish-coalescing-operator": "7.12.1", + "@babel/plugin-proposal-numeric-separator": "7.12.1", + "@babel/plugin-proposal-object-rest-spread": "7.12.1", + "@babel/plugin-proposal-optional-catch-binding": "7.12.1", + "@babel/plugin-proposal-optional-chaining": "7.12.1", + "@babel/plugin-proposal-private-methods": "7.12.1", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-syntax-async-generators": "7.8.4", + "@babel/plugin-syntax-class-properties": "7.12.1", + "@babel/plugin-syntax-dynamic-import": "7.8.3", + "@babel/plugin-syntax-export-namespace-from": "7.8.3", + "@babel/plugin-syntax-json-strings": "7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "7.8.3", + "@babel/plugin-syntax-numeric-separator": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "7.8.3", + "@babel/plugin-syntax-optional-chaining": "7.8.3", + "@babel/plugin-syntax-top-level-await": "7.12.1", + "@babel/plugin-transform-arrow-functions": "7.12.1", + "@babel/plugin-transform-async-to-generator": "7.12.1", + "@babel/plugin-transform-block-scoped-functions": "7.12.1", + "@babel/plugin-transform-block-scoping": "7.12.1", + "@babel/plugin-transform-classes": "7.12.1", + "@babel/plugin-transform-computed-properties": "7.12.1", + "@babel/plugin-transform-destructuring": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/plugin-transform-duplicate-keys": "7.12.1", + "@babel/plugin-transform-exponentiation-operator": "7.12.1", + "@babel/plugin-transform-for-of": "7.12.1", + "@babel/plugin-transform-function-name": "7.12.1", + "@babel/plugin-transform-literals": "7.12.1", + "@babel/plugin-transform-member-expression-literals": "7.12.1", + "@babel/plugin-transform-modules-amd": "7.12.1", + "@babel/plugin-transform-modules-commonjs": "7.12.1", + "@babel/plugin-transform-modules-systemjs": "7.12.1", + "@babel/plugin-transform-modules-umd": "7.12.1", + "@babel/plugin-transform-named-capturing-groups-regex": "7.12.1", + "@babel/plugin-transform-new-target": "7.12.1", + "@babel/plugin-transform-object-super": "7.12.1", + "@babel/plugin-transform-parameters": "7.12.1", + "@babel/plugin-transform-property-literals": "7.12.1", + "@babel/plugin-transform-regenerator": "7.12.1", + "@babel/plugin-transform-reserved-words": "7.12.1", + "@babel/plugin-transform-shorthand-properties": "7.12.1", + "@babel/plugin-transform-spread": "7.12.1", + "@babel/plugin-transform-sticky-regex": "7.12.1", + "@babel/plugin-transform-template-literals": "7.12.1", + "@babel/plugin-transform-typeof-symbol": "7.12.1", + "@babel/plugin-transform-unicode-escapes": "7.12.1", + "@babel/plugin-transform-unicode-regex": "7.12.1", + "@babel/preset-modules": "0.1.4", + "@babel/types": "7.12.1", + "core-js-compat": "3.6.5", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-unicode-property-regex": "7.12.1", + "@babel/plugin-transform-dotall-regex": "7.12.1", + "@babel/types": "7.12.1", + "esutils": "2.0.3" + } + }, + "@babel/preset-react": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.12.1.tgz", + "integrity": "sha512-euCExymHCi0qB9u5fKw7rvlw7AZSjw/NaB9h7EkdTt5+yHRrXdiRTh7fkG3uBPpJg82CqLfp1LHLqWGSCrab+g==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-react-display-name": "7.12.1", + "@babel/plugin-transform-react-jsx": "7.12.1", + "@babel/plugin-transform-react-jsx-development": "7.12.1", + "@babel/plugin-transform-react-jsx-self": "7.12.1", + "@babel/plugin-transform-react-jsx-source": "7.12.1", + "@babel/plugin-transform-react-pure-annotations": "7.12.1" + } + }, + "@babel/preset-typescript": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.12.1.tgz", + "integrity": "sha512-hNK/DhmoJPsksdHuI/RVrcEws7GN5eamhi28JkO52MqIxU8Z0QpmiSOQxZHWOHV7I3P4UjHV97ay4TcamMA6Kw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-transform-typescript": "7.12.1" + } + }, + "@babel/runtime": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.12.1.tgz", + "integrity": "sha512-J5AIf3vPj3UwXaAzb5j1xM4WAQDX3EMgemF8rjCP3SoW09LfRKAXQKt6CoVYl230P6iWdRcBbnLDDdnqWxZSCA==", + "requires": { + "regenerator-runtime": "0.13.7" + } + }, + "@babel/runtime-corejs3": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.12.1.tgz", + "integrity": "sha512-umhPIcMrlBZ2aTWlWjUseW9LjQKxi1dpFlQS8DzsxB//5K+u6GLTC/JliPKHsd5kJVPIU6X/Hy0YvWOYPcMxBw==", + "requires": { + "core-js-pure": "3.6.5", + "regenerator-runtime": "0.13.7" + } + }, + "@babel/template": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz", + "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==", + "requires": { + "@babel/code-frame": "7.10.4", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1" + } + }, + "@babel/traverse": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.12.1.tgz", + "integrity": "sha512-MA3WPoRt1ZHo2ZmoGKNqi20YnPt0B1S0GTZEPhhd+hw2KGUzBlHuVunj6K4sNuK+reEvyiPwtp0cpaqLzJDmAw==", + "requires": { + "@babel/code-frame": "7.10.4", + "@babel/generator": "7.12.1", + "@babel/helper-function-name": "7.10.4", + "@babel/helper-split-export-declaration": "7.11.0", + "@babel/parser": "7.12.3", + "@babel/types": "7.12.1", + "debug": "4.2.0", + "globals": "11.12.0", + "lodash": "4.17.20" + } + }, + "@babel/types": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.12.1.tgz", + "integrity": "sha512-BzSY3NJBKM4kyatSOWh3D/JJ2O3CVzBybHWxtgxnggaxEuaSTTDqeiSb/xk9lrkw2Tbqyivw5ZU4rT+EfznQsA==", + "requires": { + "@babel/helper-validator-identifier": "7.10.4", + "lodash": "4.17.20", + "to-fast-properties": "2.0.0" + } + }, + "@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==" + }, + "@docsearch/css": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-1.0.0-alpha.28.tgz", + "integrity": "sha512-1AhRzVdAkrWwhaxTX6/R7SnFHz8yLz1W8I/AldlTrfbNvZs9INk1FZiEFTJdgHaP68nhgQNWSGlQiDiI3y2RYg==" + }, + "@docsearch/react": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-1.0.0-alpha.28.tgz", + "integrity": "sha512-XjJOnCBXn+UZmtuDmgzlVIHnnvh6yHVwG4aFq8AXN6xJEIX3f180FvGaowFWAxgdtHplJxFGux0Xx4piHqBzIw==", + "requires": { + "@docsearch/css": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-core": "^1.0.0-alpha.28", + "@francoischalifour/autocomplete-preset-algolia": "^1.0.0-alpha.28", + "algoliasearch": "^4.0.0" + } + }, + "@docusaurus/core": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.0.0-alpha.66.tgz", + "integrity": "sha512-9HKqObYoyArpzSTIDguyUXm7z54bpV3dSWSc0PbKGu0Us6zP1TiOuhRDX1diFsKyvjNy7VbCe8XH8LJIdKi5dQ==", + "requires": { + "@babel/core": "^7.9.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.1", + "@babel/plugin-proposal-optional-chaining": "^7.10.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-transform-runtime": "^7.9.0", + "@babel/preset-env": "^7.9.0", + "@babel/preset-react": "^7.9.4", + "@babel/preset-typescript": "^7.9.0", + "@babel/runtime": "^7.9.2", + "@babel/runtime-corejs3": "^7.10.4", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@endiliey/static-site-generator-webpack-plugin": "^4.0.0", + "@hapi/joi": "^17.1.1", + "@svgr/webpack": "^5.4.0", + "babel-loader": "^8.1.0", + "babel-plugin-dynamic-import-node": "^2.3.0", + "boxen": "^4.2.0", + "cache-loader": "^4.1.0", + "chalk": "^3.0.0", + "chokidar": "^3.3.0", + "commander": "^4.0.1", + "copy-webpack-plugin": "^6.0.3", + "core-js": "^2.6.5", + "css-loader": "^3.4.2", + "del": "^5.1.0", + "detect-port": "^1.3.0", + "eta": "^1.1.1", + "express": "^4.17.1", + "file-loader": "^6.0.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "html-minifier-terser": "^5.0.5", + "html-tags": "^3.1.0", + "html-webpack-plugin": "^4.0.4", + "import-fresh": "^3.2.1", + "inquirer": "^7.2.0", + "is-root": "^2.1.0", + "leven": "^3.1.0", + "lodash": "^4.5.2", + "lodash.flatmap": "^4.5.0", + "lodash.has": "^4.5.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "mini-css-extract-plugin": "^0.8.0", + "nprogress": "^0.2.0", + "null-loader": "^3.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", + "pnp-webpack-plugin": "^1.6.4", + "postcss-loader": "^3.0.0", + "postcss-preset-env": "^6.7.0", + "react-dev-utils": "^10.2.1", + "react-helmet": "^6.0.0-beta", + "react-loadable": "^5.5.0", + "react-loadable-ssr-addon": "^0.3.0", + "react-router": "^5.1.2", + "react-router-config": "^5.1.1", + "react-router-dom": "^5.1.2", + "resolve-pathname": "^3.0.0", + "semver": "^6.3.0", + "serve-handler": "^6.1.3", + "shelljs": "^0.8.4", + "std-env": "^2.2.1", + "terser-webpack-plugin": "^4.1.0", + "update-notifier": "^4.1.0", + "url-loader": "^4.1.0", + "wait-file": "^1.0.5", + "webpack": "^4.44.1", + "webpack-bundle-analyzer": "^3.6.1", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2", + "webpackbar": "^4.0.0" + } + }, + "@docusaurus/mdx-loader": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.0.0-alpha.66.tgz", + "integrity": "sha512-IvtrTNeAaynEGgfCbC4CeBgO76Mu76cGogBGv8a84bYeyCOtlxOJoH6JHkJ7T/v5D6lM16qzwx5oqesZ0kZuzA==", + "requires": { + "@babel/parser": "^7.9.4", + "@babel/traverse": "^7.9.0", + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@mdx-js/mdx": "^1.5.8", + "@mdx-js/react": "^1.5.8", + "escape-html": "^1.0.3", + "file-loader": "^6.0.0", + "fs-extra": "^8.1.0", + "github-slugger": "^1.3.0", + "gray-matter": "^4.0.2", + "loader-utils": "^1.2.3", + "mdast-util-to-string": "^1.1.0", + "remark-emoji": "^2.1.0", + "stringify-object": "^3.3.0", + "unist-util-visit": "^2.0.2", + "url-loader": "^4.1.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "@docusaurus/plugin-content-blog": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.0.0-alpha.66.tgz", + "integrity": "sha512-voK5ZUZcUn5blIDakYNKQ42wPMZLfrZnvEJuwh/8S/W1oNbPN935NBu9vL23fHEmp9L2MGykAdaCmev0Su04yQ==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "chalk": "^3.0.0", + "feed": "^4.1.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "loader-utils": "^1.2.3", + "lodash": "^4.5.2", + "reading-time": "^1.2.0", + "remark-admonitions": "^1.2.1", + "webpack": "^4.44.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "@docusaurus/plugin-content-docs": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.0.0-alpha.66.tgz", + "integrity": "sha512-jvFKJR7BgjIq6xdmPg+7d2DS1fBeuIfmRTtB/apgfIW8NWO5N0DRYXOj0lgpw/ICwW//o8cLbrN+jkLlzTV/eg==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "chalk": "^3.0.0", + "execa": "^3.4.0", + "fs-extra": "^8.1.0", + "globby": "^10.0.1", + "import-fresh": "^3.2.1", + "loader-utils": "^1.2.3", + "lodash": "^4.17.19", + "lodash.flatmap": "^4.5.0", + "lodash.groupby": "^4.6.0", + "lodash.pick": "^4.4.0", + "lodash.pickby": "^4.6.0", + "lodash.sortby": "^4.6.0", + "remark-admonitions": "^1.2.1", + "shelljs": "^0.8.4", + "utility-types": "^3.10.0", + "webpack": "^4.44.1" + }, + "dependencies": { + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "requires": { + "path-key": "^3.0.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==" + } + } + }, + "@docusaurus/plugin-content-pages": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.0.0-alpha.66.tgz", + "integrity": "sha512-mY26Aeb/Wf+NFLy70YvXgdLTB+2iPN0SKOVKYwgg6ZN7Nm2kPwEpSVRq2iwiqlWk2G/vOM+ADm99Gxvm3kS61A==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/mdx-loader": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "globby": "^10.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "remark-admonitions": "^1.2.1", + "slash": "^3.0.0", + "webpack": "^4.44.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "^1.2.0" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + } + } + }, + "@docusaurus/plugin-debug": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.0.0-alpha.66.tgz", + "integrity": "sha512-9AZaEUxaY0CDOCWXQMfY3TzG79HkquZlVeJOZaA6IvCoK/Oq3B58TMNLiQyA6TA2DYf5ZYQorLJaMd02x5qBQw==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "react-json-view": "^1.19.1" + } + }, + "@docusaurus/plugin-google-analytics": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.0.0-alpha.66.tgz", + "integrity": "sha512-HVWRLHtlQYpVqH3MHloUmktJMXt7oMDQzBlKzrwAMiWUK1oXFX35DrKjTt2SE2SADpObnwWFjo0E71YT0ApQLw==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66" + } + }, + "@docusaurus/plugin-google-gtag": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.0.0-alpha.66.tgz", + "integrity": "sha512-MVnzApLSQaC38nVS+A/WkXEV4kHeX6Q/KM2DqkLeovNWLBtkQ0aHL3bvn1clAEmB33Pia0v93mzG+I1+9mrquA==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66" + } + }, + "@docusaurus/plugin-sitemap": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.0.0-alpha.66.tgz", + "integrity": "sha512-ztDevVIREyq8g+QhSGpDqscVqtubcPnEE3a4JwWSALQ2D6JscIxg897axwZSZNUMxrHBuXRjOEYOtVb/O/stVg==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "fs-extra": "^8.1.0", + "sitemap": "^3.2.2" + } + }, + "@docusaurus/preset-classic": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.0.0-alpha.66.tgz", + "integrity": "sha512-FjxjchzUS6vOUSr9Pc5kqOSQAnc+cAYsR4pTlqwD2uOJcZMr2vQ6jeKbJnhEmUYwAvzdKOVnCndnxbA+Ii8L3w==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", + "@docusaurus/plugin-debug": "2.0.0-alpha.66", + "@docusaurus/plugin-google-analytics": "2.0.0-alpha.66", + "@docusaurus/plugin-google-gtag": "2.0.0-alpha.66", + "@docusaurus/plugin-sitemap": "2.0.0-alpha.66", + "@docusaurus/theme-classic": "2.0.0-alpha.66", + "@docusaurus/theme-search-algolia": "2.0.0-alpha.66" + } + }, + "@docusaurus/theme-classic": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.0.0-alpha.66.tgz", + "integrity": "sha512-WsWqzfzA2gIF5TUMGSbiAeDeNZtKvsgymTQzalcwyhyT/QI0ywcag+03Bmjeq4H3PTC3qU+tkhddO2Rh5w/YCw==", + "requires": { + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/plugin-content-blog": "2.0.0-alpha.66", + "@docusaurus/plugin-content-docs": "2.0.0-alpha.66", + "@docusaurus/plugin-content-pages": "2.0.0-alpha.66", + "@docusaurus/types": "2.0.0-alpha.66", + "@docusaurus/utils-validation": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "@mdx-js/mdx": "^1.5.8", + "@mdx-js/react": "^1.5.8", + "@types/react-toggle": "^4.0.2", + "clsx": "^1.1.1", + "copy-text-to-clipboard": "^2.2.0", + "infima": "0.2.0-alpha.13", + "lodash": "^4.17.19", + "parse-numeric-range": "^0.0.2", + "prism-react-renderer": "^1.1.0", + "prismjs": "^1.20.0", + "prop-types": "^15.7.2", + "react-router-dom": "^5.1.2", + "react-toggle": "^4.1.1" + } + }, + "@docusaurus/theme-search-algolia": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.0.0-alpha.66.tgz", + "integrity": "sha512-5k/Fwt81Gyjv9vPE+gO8mraEHx5IqEmHLwqld5yXj7yix5XrxywkaanHqC0cFJG4MFUBgF6vNjJC8CtfLnT4Tw==", + "requires": { + "@docsearch/react": "^1.0.0-alpha.27", + "@docusaurus/core": "2.0.0-alpha.66", + "@docusaurus/utils": "2.0.0-alpha.66", + "@hapi/joi": "^17.1.1", + "algoliasearch": "^4.0.0", + "algoliasearch-helper": "^3.1.1", + "clsx": "^1.1.1", + "eta": "^1.1.1", + "lodash": "^4.17.19" + } + }, + "@docusaurus/types": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.0.0-alpha.66.tgz", + "integrity": "sha512-Zd2Kguw0+3faifr83ruIV4i/+KqfqM+zK3DpqCBxdtkP+ORLKbgsIQ48fJ40OOhQrvl38Ay4E+1w7USrrkj4Qg==", + "requires": { + "@types/webpack": "^4.41.0", + "commander": "^4.0.1", + "querystring": "0.2.0", + "webpack-merge": "^4.2.2" + } + }, + "@docusaurus/utils": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.0.0-alpha.66.tgz", + "integrity": "sha512-47jGB+Z3YVM6Xf1hxyNbJLMmc1qoTLmfwSf7NseKSkpjucbc5Ueivr+oVYp5yWoZw5sT5bObmdJYfJoD/RrbOg==", + "requires": { + "escape-string-regexp": "^2.0.0", + "fs-extra": "^8.1.0", + "gray-matter": "^4.0.2", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "resolve-pathname": "^3.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + } + } + }, + "@docusaurus/utils-validation": { + "version": "2.0.0-alpha.66", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.0.0-alpha.66.tgz", + "integrity": "sha512-vlenwY3THondey21x1qAUZyDz9qiG7ec2CBM9HgY1Ns8XhrKah9zz7TEGXjqM9lhqMQQRkvcCcveti9EXR0fcA==", + "requires": { + "@docusaurus/utils": "2.0.0-alpha.66", + "@hapi/joi": "17.1.1", + "chalk": "^3.0.0" + } + }, + "@emotion/cache": { + "version": "10.0.29", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-10.0.29.tgz", + "integrity": "sha512-fU2VtSVlHiF27empSbxi1O2JFdNWZO+2NFHfwO0pxgTep6Xa3uGb+3pVKfLww2l/IBGLNEZl5Xf/++A4wAYDYQ==", + "dev": true, + "optional": true, + "requires": { + "@emotion/sheet": "0.9.4", + "@emotion/stylis": "0.8.5", + "@emotion/utils": "0.11.3", + "@emotion/weak-memoize": "0.2.5" + } + }, + "@emotion/core": { + "version": "10.0.35", + "resolved": "https://registry.npmjs.org/@emotion/core/-/core-10.0.35.tgz", + "integrity": "sha512-sH++vJCdk025fBlRZSAhkRlSUoqSqgCzYf5fMOmqqi3bM6how+sQpg3hkgJonj8GxXM4WbD7dRO+4tegDB9fUw==", + "dev": true, + "optional": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/cache": "^10.0.27", + "@emotion/css": "^10.0.27", + "@emotion/serialize": "^0.11.15", + "@emotion/sheet": "0.9.4", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/css": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/css/-/css-10.0.27.tgz", + "integrity": "sha512-6wZjsvYeBhyZQYNrGoR5yPMYbMBNEnanDrqmsqS1mzDm1cOTu12shvl2j4QHNS36UaTE0USIJawCH9C8oW34Zw==", + "dev": true, + "optional": true, + "requires": { + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/hash": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.8.0.tgz", + "integrity": "sha512-kBJtf7PH6aWwZ6fka3zQ0p6SBYzx4fl1LoZXE2RrnYST9Xljm7WfKJrU4g/Xr3Beg72MLrp1AWNUmuYJTL7Cow==", + "dev": true, + "optional": true + }, + "@emotion/is-prop-valid": { + "version": "0.8.8", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-0.8.8.tgz", + "integrity": "sha512-u5WtneEAr5IDG2Wv65yhunPSMLIpuKsbuOktRojfrEiEvRyC85LgPMZI63cr7NUqT8ZIGdSVg8ZKGxIug4lXcA==", + "dev": true, + "optional": true, + "requires": { + "@emotion/memoize": "0.7.4" + } + }, + "@emotion/memoize": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.7.4.tgz", + "integrity": "sha512-Ja/Vfqe3HpuzRsG1oBtWTHk2PGZ7GR+2Vz5iYGelAw8dx32K0y7PjVuxK6z1nMpZOqAFsRUPCkK1YjJ56qJlgw==", + "dev": true, + "optional": true + }, + "@emotion/serialize": { + "version": "0.11.16", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.11.16.tgz", + "integrity": "sha512-G3J4o8by0VRrO+PFeSc3js2myYNOXVJ3Ya+RGVxnshRYgsvErfAOglKAiy1Eo1vhzxqtUvjCyS5gtewzkmvSSg==", + "dev": true, + "optional": true, + "requires": { + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/unitless": "0.7.5", + "@emotion/utils": "0.11.3", + "csstype": "^2.5.7" + }, + "dependencies": { + "csstype": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.13.tgz", + "integrity": "sha512-ul26pfSQTZW8dcOnD2iiJssfXw0gdNVX9IJDH/X3K5DGPfj+fUYe3kB+swUY6BF3oZDxaID3AJt+9/ojSAE05A==", + "dev": true, + "optional": true + } + } + }, + "@emotion/sheet": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-0.9.4.tgz", + "integrity": "sha512-zM9PFmgVSqBw4zL101Q0HrBVTGmpAxFZH/pYx/cjJT5advXguvcgjHFTCaIO3enL/xr89vK2bh0Mfyj9aa0ANA==", + "dev": true, + "optional": true + }, + "@emotion/styled": { + "version": "10.0.27", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-10.0.27.tgz", + "integrity": "sha512-iK/8Sh7+NLJzyp9a5+vIQIXTYxfT4yB/OJbjzQanB2RZpvmzBQOHZWhpAMZWYEKRNNbsD6WfBw5sVWkb6WzS/Q==", + "dev": true, + "optional": true, + "requires": { + "@emotion/styled-base": "^10.0.27", + "babel-plugin-emotion": "^10.0.27" + } + }, + "@emotion/styled-base": { + "version": "10.0.31", + "resolved": "https://registry.npmjs.org/@emotion/styled-base/-/styled-base-10.0.31.tgz", + "integrity": "sha512-wTOE1NcXmqMWlyrtwdkqg87Mu6Rj1MaukEoEmEkHirO5IoHDJ8LgCQL4MjJODgxWxXibGR3opGp1p7YvkNEdXQ==", + "dev": true, + "optional": true, + "requires": { + "@babel/runtime": "^7.5.5", + "@emotion/is-prop-valid": "0.8.8", + "@emotion/serialize": "^0.11.15", + "@emotion/utils": "0.11.3" + } + }, + "@emotion/stylis": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.8.5.tgz", + "integrity": "sha512-h6KtPihKFn3T9fuIrwvXXUOwlx3rfUvfZIcP5a6rh8Y7zjE3O06hT5Ss4S/YI1AYhuZ1kjaE/5EaOOI2NqSylQ==", + "dev": true, + "optional": true + }, + "@emotion/unitless": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.7.5.tgz", + "integrity": "sha512-OWORNpfjMsSSUBVrRBVGECkhWcULOAJz9ZW8uK9qgxD+87M7jHRcvh/A96XXNhXTLmKcoYSQtBEX7lHMO7YRwg==", + "dev": true, + "optional": true + }, + "@emotion/utils": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.11.3.tgz", + "integrity": "sha512-0o4l6pZC+hI88+bzuaX/6BgOvQVhbt2PfmxauVaYOGgbsAw14wdKyvMCZXnsnsHys94iadcF+RG/wZyx6+ZZBw==", + "dev": true, + "optional": true + }, + "@emotion/weak-memoize": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.2.5.tgz", + "integrity": "sha512-6U71C2Wp7r5XtFtQzYrW5iKFT67OixrSxjI4MptCHzdSVlgabczzqLe0ZSgnub/5Kp4hSbpDB1tMytZY9pwxxA==", + "dev": true, + "optional": true + }, + "@endiliey/static-site-generator-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@endiliey/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-3MBqYCs30qk1OBRC697NqhGouYbs71D1B8hrk/AFJC6GwF2QaJOQZtA1JYAaGSe650sZ8r5ppRTtCRXepDWlng==", + "requires": { + "bluebird": "3.7.2", + "cheerio": "0.22.0", + "eval": "0.1.4", + "url": "0.11.0", + "webpack-sources": "1.4.3" + } + }, + "@eslint/eslintrc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.2.0.tgz", + "integrity": "sha512-+cIGPCBdLCzqxdtwppswP+zTsH9BOIGzAeKfBIbtb4gW/giMlfMwP0HUSFfhzh20f9u8uZ8hOp62+4GPquTbwQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "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 + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.2.32", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.32.tgz", + "integrity": "sha512-ux2EDjKMpcdHBVLi/eWZynnPxs0BtFVXJkgHIxXRl+9ZFaHPvYamAfCzeeQFqHRjuJtX90wVnMRaMQAAlctz3w==" + }, + "@fortawesome/fontawesome-svg-core": { + "version": "1.2.32", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.32.tgz", + "integrity": "sha512-XjqyeLCsR/c/usUpdWcOdVtWFVjPbDFBTQkn2fQRrWhhUoxriQohO2RWDxLyUM8XpD+Zzg5xwJ8gqTYGDLeGaQ==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.32" + } + }, + "@fortawesome/free-solid-svg-icons": { + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.1.tgz", + "integrity": "sha512-EFMuKtzRMNbvjab/SvJBaOOpaqJfdSap/Nl6hst7CgrJxwfORR1drdTV6q1Ib/JVzq4xObdTDcT6sqTaXMqfdg==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.2.32" + } + }, + "@fortawesome/react-fontawesome": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.12.tgz", + "integrity": "sha512-kV6HtqotM3K4YIXlTVvomuIi6QgGCvYm++ImyEx2wwgmSppZ6kbbA29ASwjAUBD63j2OFU0yoxeXpZkjrrX0qQ==", + "requires": { + "prop-types": "^15.7.2" + } + }, + "@francoischalifour/autocomplete-core": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-core/-/autocomplete-core-1.0.0-alpha.28.tgz", + "integrity": "sha512-rL9x+72btViw+9icfBKUJjZj87FgjFrD2esuTUqtj4RAX3s4AuVZiN8XEsfjQBSc6qJk31cxlvqZHC/BIyYXgg==" + }, + "@francoischalifour/autocomplete-preset-algolia": { + "version": "1.0.0-alpha.28", + "resolved": "https://registry.npmjs.org/@francoischalifour/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.0.0-alpha.28.tgz", + "integrity": "sha512-bprfNmYt1opFUFEtD2XfY/kEsm13bzHQgU80uMjhuK0DJ914IjolT1GytpkdM6tJ4MBvyiJPP+bTtWO+BZ7c7w==" + }, + "@hapi/address": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-4.1.0.tgz", + "integrity": "sha512-SkszZf13HVgGmChdHo/PxchnSaCJ6cetVqLzyciudzZRT0jcOouIF/Q93mgjw8cce+D+4F4C1Z/WrfFN+O3VHQ==", + "requires": { + "@hapi/hoek": "9.1.0" + } + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" + }, + "@hapi/formula": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/formula/-/formula-2.0.0.tgz", + "integrity": "sha512-V87P8fv7PI0LH7LiVi8Lkf3x+KCO7pQozXRssAHNXXL9L1K+uyu4XypLXwxqVDKgyQai6qj3/KteNlrqDx4W5A==" + }, + "@hapi/hoek": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.1.0.tgz", + "integrity": "sha512-i9YbZPN3QgfighY/1X1Pu118VUz2Fmmhd6b2n0/O8YVgGGfw0FbUYoA97k7FkpGJ+pLCFEDLUmAPPV4D1kpeFw==" + }, + "@hapi/joi": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-17.1.1.tgz", + "integrity": "sha512-p4DKeZAoeZW4g3u7ZeRo+vCDuSDgSvtsB/NpfjXEHTUjSeINAi/RrVOWiVQ1isaoLzMvFEhe8n5065mQq1AdQg==", + "requires": { + "@hapi/address": "4.1.0", + "@hapi/formula": "2.0.0", + "@hapi/hoek": "9.1.0", + "@hapi/pinpoint": "2.0.0", + "@hapi/topo": "5.0.0" + } + }, + "@hapi/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@hapi/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-vzXR5MY7n4XeIvLpfl3HtE3coZYO4raKXW766R6DZw/6aLqR26iuZ109K7a0NtF2Db0jxqh7xz2AxkUwpUFybw==" + }, + "@hapi/topo": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.0.0.tgz", + "integrity": "sha512-tFJlT47db0kMqVm3H4nQYgn6Pwg10GTZHb1pwmSiv1K4ks6drQOtfEF5ZnPjkvC+y4/bUPHK+bc87QvLcL+WMw==", + "requires": { + "@hapi/hoek": "9.1.0" + } + }, + "@mdx-js/mdx": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.19.tgz", + "integrity": "sha512-L3eLhEFnV/2bcb9XwOegsRmLHd1oEDQPtTBVezhptQ5U1YM+/WQNzx1apjzVTAyukwOanUXnTUMjRUtqJNgFCg==", + "requires": { + "@babel/core": "7.11.6", + "@babel/plugin-syntax-jsx": "7.10.4", + "@babel/plugin-syntax-object-rest-spread": "7.8.3", + "@mdx-js/util": "1.6.19", + "babel-plugin-apply-mdx-type-prop": "1.6.19", + "babel-plugin-extract-import-names": "1.6.19", + "camelcase-css": "2.0.1", + "detab": "2.0.3", + "hast-util-raw": "6.0.1", + "lodash.uniq": "4.5.0", + "mdast-util-to-hast": "9.1.1", + "remark-footnotes": "2.0.0", + "remark-mdx": "1.6.19", + "remark-parse": "8.0.3", + "remark-squeeze-paragraphs": "4.0.0", + "style-to-object": "0.3.0", + "unified": "9.2.0", + "unist-builder": "2.0.3", + "unist-util-visit": "2.0.3" + }, + "dependencies": { + "@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "@mdx-js/react": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.19.tgz", + "integrity": "sha512-RS37Tagqyp2R0XFPoUZeSbZC5uJQRPhqOHWeT1LEwxESjMWb3VORHz7E827ldeQr3UW6VEQEyq/THegu+bLj6A==", + "requires": {} + }, + "@mdx-js/util": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.19.tgz", + "integrity": "sha512-bkkQNSHz3xSr3KRHUQ2Qk2XhewvvXAOUqjIUKwcQuL4ijOA4tUHZfUgXExi5CpMysrX7izcsyICtXjZHlfJUjg==" + }, + "@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==", + "requires": { + "call-me-maybe": "1.0.1", + "glob-to-regexp": "0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", + "integrity": "sha512-eGmwYQn3gxo4r7jdQnkrrN6bY478C3P+a/y72IJukF8LjB6ZHeB3c+Ehacj3sYeSmUXGlnA67/PmbM9CVwL7Dw==", + "requires": { + "@nodelib/fs.stat": "2.0.3", + "run-parallel": "1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" + }, + "@nodelib/fs.walk": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.4.tgz", + "integrity": "sha512-1V9XOY4rDW0rehzbrcqAmHnz8e7SKvX27gh8Gt2WgB0+pdzdiLV83p72kZPU+jvMbS1qU5mauP2iOvO8rhmurQ==", + "requires": { + "@nodelib/fs.scandir": "2.1.3", + "fastq": "1.8.0" + } + }, + "@npmcli/move-file": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.0.1.tgz", + "integrity": "sha512-Uv6h1sT+0DrblvIrolFtbvM1FgWm+/sy4B3pvLp67Zys+thcukzS5ekn7HsZFGpWP4Q3fYJCljbWQE/XivMRLw==", + "requires": { + "mkdirp": "1.0.4" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@styled-system/background": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/background/-/background-5.1.2.tgz", + "integrity": "sha512-jtwH2C/U6ssuGSvwTN3ri/IyjdHb8W9X/g8Y0JLcrH02G+BW3OS8kZdHphF1/YyRklnrKrBT2ngwGUK6aqqV3A==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/border": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/border/-/border-5.1.5.tgz", + "integrity": "sha512-JvddhNrnhGigtzWRCVuAHepniyVi6hBlimxWDVAdcTuk7aRn9BYJUwfHslURtwYFsF5FoEs8Zmr1oZq2M1AP0A==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/color": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/color/-/color-5.1.2.tgz", + "integrity": "sha512-1kCkeKDZkt4GYkuFNKc7vJQMcOmTl3bJY3YBUs7fCNM6mMYJeT1pViQ2LwBSBJytj3AB0o4IdLBoepgSgGl5MA==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/core": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/core/-/core-5.1.2.tgz", + "integrity": "sha512-XclBDdNIy7OPOsN4HBsawG2eiWfCcuFt6gxKn1x4QfMIgeO6TOlA2pZZ5GWZtIhCUqEPTgIBta6JXsGyCkLBYw==", + "dev": true, + "optional": true, + "requires": { + "object-assign": "^4.1.1" + } + }, + "@styled-system/css": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/css/-/css-5.1.5.tgz", + "integrity": "sha512-XkORZdS5kypzcBotAMPBoeckDs9aSZVkvrAlq5K3xP8IMAUek+x2O4NtwoSgkYkWWzVBu6DGdFZLR790QWGG+A==", + "dev": true, + "optional": true + }, + "@styled-system/flexbox": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/flexbox/-/flexbox-5.1.2.tgz", + "integrity": "sha512-6hHV52+eUk654Y1J2v77B8iLeBNtc+SA3R4necsu2VVinSD7+XY5PCCEzBFaWs42dtOEDIa2lMrgL0YBC01mDQ==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/grid": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/grid/-/grid-5.1.2.tgz", + "integrity": "sha512-K3YiV1KyHHzgdNuNlaw8oW2ktMuGga99o1e/NAfTEi5Zsa7JXxzwEnVSDSBdJC+z6R8WYTCYRQC6bkVFcvdTeg==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/layout": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/layout/-/layout-5.1.2.tgz", + "integrity": "sha512-wUhkMBqSeacPFhoE9S6UF3fsMEKFv91gF4AdDWp0Aym1yeMPpqz9l9qS/6vjSsDPF7zOb5cOKC3tcKKOMuDCPw==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/position": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/position/-/position-5.1.2.tgz", + "integrity": "sha512-60IZfMXEOOZe3l1mCu6sj/2NAyUmES2kR9Kzp7s2D3P4qKsZWxD1Se1+wJvevb+1TP+ZMkGPEYYXRyU8M1aF5A==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/shadow": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/shadow/-/shadow-5.1.2.tgz", + "integrity": "sha512-wqniqYb7XuZM7K7C0d1Euxc4eGtqEe/lvM0WjuAFsQVImiq6KGT7s7is+0bNI8O4Dwg27jyu4Lfqo/oIQXNzAg==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/should-forward-prop": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/should-forward-prop/-/should-forward-prop-5.1.5.tgz", + "integrity": "sha512-+rPRomgCGYnUIaFabDoOgpSDc4UUJ1KsmlnzcEp0tu5lFrBQKgZclSo18Z1URhaZm7a6agGtS5Xif7tuC2s52Q==", + "dev": true, + "optional": true, + "requires": { + "@emotion/is-prop-valid": "^0.8.1", + "@emotion/memoize": "^0.7.1", + "styled-system": "^5.1.5" + } + }, + "@styled-system/space": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/space/-/space-5.1.2.tgz", + "integrity": "sha512-+zzYpR8uvfhcAbaPXhH8QgDAV//flxqxSjHiS9cDFQQUSznXMQmxJegbhcdEF7/eNnJgHeIXv1jmny78kipgBA==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/typography": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@styled-system/typography/-/typography-5.1.2.tgz", + "integrity": "sha512-BxbVUnN8N7hJ4aaPOd7wEsudeT7CxarR+2hns8XCX1zp0DFfbWw4xYa/olA0oQaqx7F1hzDg+eRaGzAJbF+jOg==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2" + } + }, + "@styled-system/variant": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@styled-system/variant/-/variant-5.1.5.tgz", + "integrity": "sha512-Yn8hXAFoWIro8+Q5J8YJd/mP85Teiut3fsGVR9CAxwgNfIAiqlYxsk5iHU7VHJks/0KjL4ATSjmbtCDC/4l1qw==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/core": "^5.1.2", + "@styled-system/css": "^5.1.5" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" + }, + "@svgr/babel-plugin-remove-jsx-attribute": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" + }, + "@svgr/babel-plugin-remove-jsx-empty-expression": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.4.0.tgz", + "integrity": "sha512-zLl4Fl3NvKxxjWNkqEcpdSOpQ3LGVH2BNFQ6vjaK6sFo2IrSznrhURIPI0HAphKiiIwNYjAfE0TNoQDSZv0U9A==" + }, + "@svgr/babel-preset": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.4.0.tgz", + "integrity": "sha512-Gyx7cCxua04DBtyILTYdQxeO/pwfTBev6+eXTbVbxe4HTGhOUW6yo7PSbG2p6eJMl44j6XSequ0ZDP7bl0nu9A==", + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "5.4.0", + "@svgr/babel-plugin-transform-svg-component": "5.4.0" + } + }, + "@svgr/core": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.4.0.tgz", + "integrity": "sha512-hWGm1DCCvd4IEn7VgDUHYiC597lUYhFau2lwJBYpQWDirYLkX4OsXu9IslPgJ9UpP7wsw3n2Ffv9sW7SXJVfqQ==", + "requires": { + "@svgr/plugin-jsx": "5.4.0", + "camelcase": "6.1.0", + "cosmiconfig": "6.0.0" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.4.0.tgz", + "integrity": "sha512-+U0TZZpPsP2V1WvVhqAOSTk+N+CjYHdZx+x9UBa1eeeZDXwH8pt0CrQf2+SvRl/h2CAPRFkm+Ey96+jKP8Bsgg==", + "requires": { + "@babel/types": "7.12.1" + } + }, + "@svgr/plugin-jsx": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.4.0.tgz", + "integrity": "sha512-SGzO4JZQ2HvGRKDzRga9YFSqOqaNrgLlQVaGvpZ2Iht2gwRp/tq+18Pvv9kS9ZqOMYgyix2LLxZMY1LOe9NPqw==", + "requires": { + "@babel/core": "7.12.3", + "@svgr/babel-preset": "5.4.0", + "@svgr/hast-util-to-babel-ast": "5.4.0", + "svg-parser": "2.0.4" + } + }, + "@svgr/plugin-svgo": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.4.0.tgz", + "integrity": "sha512-3Cgv3aYi1l6SHyzArV9C36yo4kgwVdF3zPQUC6/aCDUeXAofDYwE5kk3e3oT5ZO2a0N3lB+lLGvipBG6lnG8EA==", + "requires": { + "cosmiconfig": "6.0.0", + "merge-deep": "3.0.2", + "svgo": "1.3.2" + } + }, + "@svgr/webpack": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.4.0.tgz", + "integrity": "sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg==", + "requires": { + "@babel/core": "7.12.3", + "@babel/plugin-transform-react-constant-elements": "7.12.1", + "@babel/preset-env": "7.12.1", + "@babel/preset-react": "7.12.1", + "@svgr/core": "5.4.0", + "@svgr/plugin-jsx": "5.4.0", + "@svgr/plugin-svgo": "5.4.0", + "loader-utils": "2.0.0" + } + }, + "@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==", + "requires": { + "defer-to-connect": "1.1.3" + } + }, + "@types/anymatch": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz", + "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "requires": { + "@types/minimatch": "3.0.3", + "@types/node": "14.11.10" + } + }, + "@types/hast": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", + "integrity": "sha512-viwwrB+6xGzw+G1eWpF9geV3fnsDgXqHG+cqgiHrvQfDUW5hzhCyV7Sy3UJxhfRFBsgky2SSW33qi/YrIkjX5Q==", + "requires": { + "@types/unist": "*" + } + }, + "@types/html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-giAlZwstKbmvMk1OO7WXSj4OZ0keXAcl2TQq4LWHiiPH2ByaH7WeUzng+Qej8UPxxv+8lRTuouo0iaNDBuzIBA==" + }, + "@types/json-schema": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", + "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==" + }, + "@types/mdast": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.3.tgz", + "integrity": "sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==", + "requires": { + "@types/unist": "*" + } + }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "@types/node": { + "version": "14.11.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.10.tgz", + "integrity": "sha512-yV1nWZPlMFpoXyoknm4S56y2nlTAuFYaJuQtYRAOU7xA/FJ9RY0Xm7QOkaYMMmr8ESdHIuUb6oQgR/0+2NqlyA==" + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + }, + "@types/parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" + }, + "@types/prop-types": { + "version": "15.7.3", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.3.tgz", + "integrity": "sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw==" + }, + "@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "@types/react": { + "version": "16.9.53", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.53.tgz", + "integrity": "sha512-4nW60Sd4L7+WMXH1D6jCdVftuW7j4Za6zdp6tJ33Rqv0nk1ZAmQKML9ZLD4H0dehA3FZxXR/GM8gXplf82oNGw==", + "requires": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-toggle": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/react-toggle/-/react-toggle-4.0.2.tgz", + "integrity": "sha512-sHqfoKFnL0YU2+OC4meNEC8Ptx9FE8/+nFeFvNcdBa6ANA8KpAzj3R9JN8GtrvlLgjKDoYgI7iILgXYcTPo2IA==", + "requires": { + "@types/react": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@types/source-list-map/-/source-list-map-0.1.2.tgz", + "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" + }, + "@types/tapable": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.6.tgz", + "integrity": "sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA==" + }, + "@types/uglify-js": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.11.0.tgz", + "integrity": "sha512-I0Yd8TUELTbgRHq2K65j8rnDPAzAP+DiaF/syLem7yXwYLsHZhPd+AM2iXsWmf9P2F2NlFCgl5erZPQx9IbM9Q==", + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/unist": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", + "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" + }, + "@types/webpack": { + "version": "4.41.22", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.22.tgz", + "integrity": "sha512-JQDJK6pj8OMV9gWOnN1dcLCyU9Hzs6lux0wBO4lr1+gyEhIBR9U3FMrz12t2GPkg110XAxEAw2WHF6g7nZIbRQ==", + "requires": { + "@types/anymatch": "1.3.1", + "@types/node": "14.11.10", + "@types/tapable": "1.0.6", + "@types/uglify-js": "3.11.0", + "@types/webpack-sources": "2.0.0", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "@types/webpack-sources": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-2.0.0.tgz", + "integrity": "sha512-a5kPx98CNFRKQ+wqawroFunvFqv7GHm/3KOI52NY9xWADgc8smu4R6prt4EU/M4QfVjvgBkMqU4fBhw3QfMVkg==", + "requires": { + "@types/node": "14.11.10", + "@types/source-list-map": "0.1.2", + "source-map": "0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "requires": { + "@xtuc/ieee754": "1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "2.1.27", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==" + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==" + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "requires": { + "clean-stack": "2.2.0", + "indent-string": "4.0.0" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "3.1.3", + "fast-json-stable-stringify": "2.1.0", + "json-schema-traverse": "0.4.1", + "uri-js": "4.4.0" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + }, + "algoliasearch": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.5.1.tgz", + "integrity": "sha512-b6yT1vWMlBdVObQipKxvt0M6SEvGetVj+FFFlo0Fy06gkdj6WCJaS4t10Q/hC3I2VG9QmpCqlK3Esgg1y1E+uw==", + "requires": { + "@algolia/cache-browser-local-storage": "4.5.1", + "@algolia/cache-common": "4.5.1", + "@algolia/cache-in-memory": "4.5.1", + "@algolia/client-account": "4.5.1", + "@algolia/client-analytics": "4.5.1", + "@algolia/client-common": "4.5.1", + "@algolia/client-recommendation": "4.5.1", + "@algolia/client-search": "4.5.1", + "@algolia/logger-common": "4.5.1", + "@algolia/logger-console": "4.5.1", + "@algolia/requester-browser-xhr": "4.5.1", + "@algolia/requester-common": "4.5.1", + "@algolia/requester-node-http": "4.5.1", + "@algolia/transporter": "4.5.1" + } + }, + "algoliasearch-helper": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.2.2.tgz", + "integrity": "sha512-/3XvE33R+gQKaiPdy3nmHYqhF8hqIu8xnlOicVxb1fD6uMFmxW8rGLzzrRfsPfxgAfm+c1NslLb3TzQVIB8aVA==", + "requires": { + "events": "^1.1.1" + }, + "dependencies": { + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=" + } + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "requires": { + "string-width": "3.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + } + } + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==" + }, + "ansi-escapes": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", + "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "requires": { + "type-fest": "0.11.0" + }, + "dependencies": { + "type-fest": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", + "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==" + } + } + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=" + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + }, + "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==", + "requires": { + "color-convert": "1.9.3" + } + }, + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "requires": { + "normalize-path": "3.0.0", + "picomatch": "2.2.2" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "array-includes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.1.tgz", + "integrity": "sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "is-string": "^1.0.5" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=" + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + }, + "array.prototype.flatmap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz", + "integrity": "sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "4.11.9", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "safer-buffer": "2.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "requires": { + "object-assign": "4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "requires": { + "lodash": "4.17.20" + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "requires": { + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "colorette": "1.2.1", + "normalize-range": "0.1.2", + "num2fraction": "1.2.2", + "postcss": "7.0.35", + "postcss-value-parser": "4.1.0" + } + }, + "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=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.3", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-loader": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", + "requires": { + "find-cache-dir": "2.1.0", + "loader-utils": "1.4.0", + "mkdirp": "0.5.5", + "pify": "4.0.1", + "schema-utils": "2.7.1" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + } + } + }, + "babel-plugin-apply-mdx-type-prop": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.19.tgz", + "integrity": "sha512-zAuL11EaBbeNpfTqsa9xP7mkvX3V4LaEV6M9UUaI4zQtTqN5JwvDyhNsALQs5Ud7WFQSXtoqU74saTgE+rgZOw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.19" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "requires": { + "object.assign": "4.1.1" + } + }, + "babel-plugin-emotion": { + "version": "10.0.33", + "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz", + "integrity": "sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ==", + "dev": true, + "optional": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@emotion/hash": "0.8.0", + "@emotion/memoize": "0.7.4", + "@emotion/serialize": "^0.11.16", + "babel-plugin-macros": "^2.0.0", + "babel-plugin-syntax-jsx": "^6.18.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^1.0.5", + "find-root": "^1.1.0", + "source-map": "^0.5.7" + } + }, + "babel-plugin-extract-import-names": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.19.tgz", + "integrity": "sha512-5kbSEhQdg1ybR9OnxybbyR1PXw51z6T6ZCtX3vYSU6t1pC/+eBlSzWXyU2guStbwQgJyxS+mHWSNnL7PUdzAlw==", + "requires": { + "@babel/helper-plugin-utils": "7.10.4" + } + }, + "babel-plugin-macros": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz", + "integrity": "sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg==", + "dev": true, + "optional": true, + "requires": { + "@babel/runtime": "^7.7.2", + "cosmiconfig": "^6.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-syntax-jsx": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz", + "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY=", + "dev": true, + "optional": true + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "requires": { + "cache-base": "1.0.1", + "class-utils": "0.3.6", + "component-emitter": "1.3.0", + "define-property": "1.0.0", + "isobject": "3.0.1", + "mixin-deep": "1.3.2", + "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=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + } + } + }, + "base16": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", + "integrity": "sha1-4pf2DX7BAUp6lxo568ipjAtoHnA=" + }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "requires": { + "bluebird": "3.7.2", + "check-types": "8.0.3", + "hoopy": "0.1.4", + "tryer": "1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" + }, + "binary-extensions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", + "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==" + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "bn.js": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", + "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "requires": { + "bytes": "3.1.0", + "content-type": "1.0.4", + "debug": "2.6.9", + "depd": "1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "1.6.18" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "requires": { + "array-flatten": "2.1.2", + "deep-equal": "1.1.1", + "dns-equal": "1.0.0", + "dns-txt": "2.0.2", + "multicast-dns": "6.2.3", + "multicast-dns-service-types": "1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "requires": { + "ansi-align": "3.0.0", + "camelcase": "5.3.1", + "chalk": "3.0.0", + "cli-boxes": "2.2.1", + "string-width": "4.2.0", + "term-size": "2.2.0", + "type-fest": "0.8.1", + "widest-line": "3.1.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "1.0.3", + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "evp_bytestokey": "1.0.3", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "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==", + "requires": { + "browserify-aes": "1.2.0", + "browserify-des": "1.0.2", + "evp_bytestokey": "1.0.3" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "1.0.4", + "des.js": "1.0.1", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "requires": { + "bn.js": "4.11.9", + "randombytes": "2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "requires": { + "bn.js": "5.1.3", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "elliptic": "6.5.3", + "inherits": "2.0.4", + "parse-asn1": "5.1.6", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "requires": { + "pako": "1.0.11" + } + }, + "browserslist": { + "version": "4.14.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.14.5.tgz", + "integrity": "sha512-Z+vsCZIvCBvqLoYkBFTwEYH3v5MCQbsAjp50ERycpOjnPmolg1Gjy4+KaWWpm8QOJt9GHkhdqAl14NpCX73CWA==", + "requires": { + "caniuse-lite": "1.0.30001148", + "electron-to-chromium": "1.3.582", + "escalade": "3.1.1", + "node-releases": "1.1.63" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "requires": { + "base64-js": "1.3.1", + "ieee754": "1.1.13", + "isarray": "1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==" + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==" + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" + }, + "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=" + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + }, + "cacache": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.0.5.tgz", + "integrity": "sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A==", + "requires": { + "@npmcli/move-file": "1.0.1", + "chownr": "2.0.0", + "fs-minipass": "2.1.0", + "glob": "7.1.6", + "infer-owner": "1.0.4", + "lru-cache": "6.0.0", + "minipass": "3.1.3", + "minipass-collect": "1.0.2", + "minipass-flush": "1.0.5", + "minipass-pipeline": "1.2.4", + "mkdirp": "1.0.4", + "p-map": "4.0.0", + "promise-inflight": "1.0.1", + "rimraf": "3.0.2", + "ssri": "8.0.0", + "tar": "6.0.5", + "unique-filename": "1.1.1" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "requires": { + "collection-visit": "1.0.0", + "component-emitter": "1.3.0", + "get-value": "2.0.6", + "has-value": "1.0.0", + "isobject": "3.0.1", + "set-value": "2.0.1", + "to-object-path": "0.3.0", + "union-value": "1.0.1", + "unset-value": "1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "requires": { + "buffer-json": "2.0.0", + "find-cache-dir": "3.3.1", + "loader-utils": "1.4.0", + "mkdirp": "0.5.5", + "neo-async": "2.6.2", + "schema-utils": "2.7.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "6.3.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "2.3.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "4.1.0" + } + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "1.0.2", + "get-stream": "5.2.0", + "http-cache-semantics": "4.1.0", + "keyv": "3.1.0", + "lowercase-keys": "2.0.0", + "normalize-url": "4.5.0", + "responselike": "1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==" + } + } + }, + "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=" + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "requires": { + "callsites": "2.0.0" + }, + "dependencies": { + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=" + } + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "requires": { + "caller-callsite": "2.0.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camel-case": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", + "requires": { + "pascal-case": "3.1.1", + "tslib": "1.14.1" + } + }, + "camelcase": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.1.0.tgz", + "integrity": "sha512-WCMml9ivU60+8rEJgELlFp1gxFcEGxwYleE3bziHEDeqsqAWGHdimB7beBFGjLzVNgPGyDsfgXLQEYMpmIFnVQ==" + }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "requires": { + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "lodash.memoize": "4.1.2", + "lodash.uniq": "4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001148", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001148.tgz", + "integrity": "sha512-E66qcd0KMKZHNJQt9hiLZGE3J4zuTqE1OnU53miEVtylFbwOEmeA5OsRu90noZful+XGSQOni1aT2tiqu/9yYw==" + }, + "ccount": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.0.5.tgz", + "integrity": "sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw==" + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "requires": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "4.0.0" + } + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==" + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.1", + "entities": "1.1.2", + "htmlparser2": "3.10.1", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.2", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + } + }, + "chokidar": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", + "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", + "requires": { + "anymatch": "3.1.1", + "braces": "3.0.2", + "fsevents": "2.1.3", + "glob-parent": "5.1.1", + "is-binary-path": "2.1.0", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "readdirp": "3.5.0" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "requires": { + "tslib": "1.14.1" + } + }, + "ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==" + }, + "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==", + "requires": { + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "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==", + "requires": { + "arr-union": "3.1.0", + "define-property": "0.2.5", + "isobject": "3.0.1", + "static-extend": "0.1.2" + }, + "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=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "classnames": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", + "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==" + }, + "clean-css": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", + "requires": { + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "requires": { + "restore-cursor": "3.1.0" + } + }, + "cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" + }, + "clipboard": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.6.tgz", + "integrity": "sha512-g5zbiixBRk/wyKakSwCKd7vQXDjFnAMGHoEyBogG/bw9kTD9GvdAvaoRR1ALcEzt3pVKxZR0pViekPMIS0QyGg==", + "optional": true, + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "3.1.0", + "strip-ansi": "5.2.0", + "wrap-ansi": "5.1.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + } + } + }, + "clone-deep": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz", + "integrity": "sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY=", + "requires": { + "for-own": "0.1.5", + "is-plain-object": "2.0.4", + "kind-of": "3.2.2", + "lazy-cache": "1.0.4", + "shallow-clone": "0.1.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "1.0.1" + } + }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "requires": { + "@types/q": "1.5.4", + "chalk": "2.4.2", + "q": "1.5.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + } + } + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "requires": { + "map-visit": "1.0.0", + "object-visit": "1.0.1" + } + }, + "color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", + "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "requires": { + "color-convert": "1.9.3", + "color-string": "1.5.4" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.4.tgz", + "integrity": "sha512-57yF5yt8Xa3czSEW1jfQDE79Idk0+AkN/4KWad6tbdxUmAs3MvjxlWSWD4deYytcRfoZ9nhKyFl1kj5tBvidbw==", + "requires": { + "color-name": "1.1.3", + "simple-swizzle": "0.2.2" + } + }, + "colorette": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", + "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=" + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": "1.44.0" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "1.3.7", + "bytes": "3.0.0", + "compressible": "2.0.18", + "debug": "2.6.9", + "on-headers": "1.0.2", + "safe-buffer": "5.1.2", + "vary": "1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "1.1.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "typedarray": "0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "5.3.0", + "graceful-fs": "4.2.4", + "make-dir": "3.1.0", + "unique-string": "2.0.0", + "write-file-atomic": "3.0.3", + "xdg-basedir": "4.0.0" + }, + "dependencies": { + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "6.3.0" + } + } + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==" + }, + "consola": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.0.tgz", + "integrity": "sha512-vlcSGgdYS26mPf7qNi+dCisbhiyDnrN1zaRbw3CSuc2wGOMEGGPsp46PdRG5gqXwgtJfjxDkxRNAgRPr1B77vQ==" + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=" + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "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==" + }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "requires": { + "aproba": "1.2.0", + "fs-write-stream-atomic": "1.0.10", + "iferr": "0.1.5", + "mkdirp": "0.5.5", + "rimraf": "2.7.1", + "run-queue": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "7.1.6" + } + } + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + }, + "copy-text-to-clipboard": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-2.2.0.tgz", + "integrity": "sha512-WRvoIdnTs1rgPMkgA2pUOa/M4Enh2uzCwdKsOMYNAJiz/4ZvEJgmbF4OmninPmlFdAWisfeh0tH+Cpf7ni3RqQ==" + }, + "copy-to-clipboard": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.1.tgz", + "integrity": "sha512-i13qo6kIHTTpCm8/Wup+0b1mVWETvu2kIMzKoK8FpkLkFxlt0znUAHcMzox+T8sPlqtZXq3CulEjQHsYiGFJUw==", + "requires": { + "toggle-selection": "^1.0.6" + } + }, + "copy-webpack-plugin": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-6.2.1.tgz", + "integrity": "sha512-VH2ZTMIBsx4p++Lmpg77adZ0KUyM5gFR/9cuTrbneNnJlcQXUFvsNariPqq2dq2kV3F2skHiDGPQCyKWy1+U0Q==", + "requires": { + "cacache": "15.0.5", + "fast-glob": "3.2.4", + "find-cache-dir": "3.3.1", + "glob-parent": "5.1.1", + "globby": "11.0.1", + "loader-utils": "2.0.0", + "normalize-path": "3.0.0", + "p-limit": "3.0.2", + "schema-utils": "3.0.0", + "serialize-javascript": "5.0.1", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "globby": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.1.tgz", + "integrity": "sha512-iH9RmgwCmUJHi2z5o2l3eTtGBtXek1OYlHrbcxOYugyHLmAsZrPj43OtHThd62Buh/Vv6VyCBD2bdyWcGNQqoQ==", + "requires": { + "array-union": "2.1.0", + "dir-glob": "3.0.1", + "fast-glob": "3.2.4", + "ignore": "5.1.8", + "merge2": "1.4.1", + "slash": "3.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "6.3.0" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "2.3.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "2.2.0" + } + } + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "4.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + } + } + }, + "core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==" + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "requires": { + "browserslist": "4.14.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } + }, + "core-js-pure": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz", + "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==" + }, + "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=" + }, + "cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", + "requires": { + "@types/parse-json": "4.0.0", + "import-fresh": "3.2.1", + "parse-json": "5.1.0", + "path-type": "4.0.0", + "yaml": "1.10.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "4.11.9", + "elliptic": "6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "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==", + "requires": { + "cipher-base": "1.0.4", + "inherits": "2.0.4", + "md5.js": "1.3.5", + "ripemd160": "2.0.2", + "sha.js": "2.4.11" + } + }, + "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==", + "requires": { + "cipher-base": "1.0.4", + "create-hash": "1.2.0", + "inherits": "2.0.4", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "cross-spawn": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.1.tgz", + "integrity": "sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg==", + "requires": { + "path-key": "3.1.1", + "shebang-command": "2.0.0", + "which": "2.0.2" + } + }, + "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==", + "requires": { + "browserify-cipher": "1.0.1", + "browserify-sign": "4.2.1", + "create-ecdh": "4.0.4", + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "diffie-hellman": "5.0.3", + "inherits": "2.0.4", + "pbkdf2": "3.1.1", + "public-encrypt": "4.0.3", + "randombytes": "2.1.0", + "randomfill": "1.0.4" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", + "requires": { + "postcss": "7.0.35" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "requires": { + "postcss": "7.0.35", + "timsort": "0.3.0" + } + }, + "css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "requires": { + "camelcase": "5.3.1", + "cssesc": "3.0.0", + "icss-utils": "4.1.1", + "loader-utils": "1.4.0", + "normalize-path": "3.0.0", + "postcss": "7.0.35", + "postcss-modules-extract-imports": "2.0.0", + "postcss-modules-local-by-default": "3.0.3", + "postcss-modules-scope": "2.2.0", + "postcss-modules-values": "3.0.0", + "postcss-value-parser": "4.1.0", + "schema-utils": "2.7.1", + "semver": "6.3.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + } + } + }, + "css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "requires": { + "postcss": "7.0.35" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.3", + "domutils": "1.5.1", + "nth-check": "1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "requires": { + "mdn-data": "2.0.4", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "css-what": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", + "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==" + }, + "cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "requires": { + "cosmiconfig": "5.2.1", + "cssnano-preset-default": "4.0.7", + "is-resolvable": "1.1.0", + "postcss": "7.0.35" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.14.0", + "parse-json": "4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "2.0.0", + "resolve-from": "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=", + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "requires": { + "css-declaration-sorter": "4.0.1", + "cssnano-util-raw-cache": "4.0.1", + "postcss": "7.0.35", + "postcss-calc": "7.0.5", + "postcss-colormin": "4.0.3", + "postcss-convert-values": "4.0.1", + "postcss-discard-comments": "4.0.2", + "postcss-discard-duplicates": "4.0.2", + "postcss-discard-empty": "4.0.1", + "postcss-discard-overridden": "4.0.1", + "postcss-merge-longhand": "4.0.11", + "postcss-merge-rules": "4.0.3", + "postcss-minify-font-values": "4.0.2", + "postcss-minify-gradients": "4.0.2", + "postcss-minify-params": "4.0.2", + "postcss-minify-selectors": "4.0.2", + "postcss-normalize-charset": "4.0.1", + "postcss-normalize-display-values": "4.0.2", + "postcss-normalize-positions": "4.0.2", + "postcss-normalize-repeat-style": "4.0.2", + "postcss-normalize-string": "4.0.2", + "postcss-normalize-timing-functions": "4.0.2", + "postcss-normalize-unicode": "4.0.1", + "postcss-normalize-url": "4.0.1", + "postcss-normalize-whitespace": "4.0.2", + "postcss-ordered-values": "4.1.2", + "postcss-reduce-initial": "4.0.3", + "postcss-reduce-transforms": "4.0.2", + "postcss-svgo": "4.0.2", + "postcss-unique-selectors": "4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=" + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=" + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "requires": { + "postcss": "7.0.35" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==" + }, + "csso": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", + "requires": { + "css-tree": "1.0.0-alpha.39" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", + "requires": { + "mdn-data": "2.0.6", + "source-map": "0.6.1" + } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "csstype": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.3.tgz", + "integrity": "sha512-jPl+wbWPOWJ7SXsWyqGRk3lGecbar0Cb0OvZF/r/ZU011R4YqiRehgkQ9p4eQfo9DSDLqLL3wHwfxeJiuIsNag==" + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=" + }, + "debug": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", + "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "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=" + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "1.0.1" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "requires": { + "is-arguments": "1.0.4", + "is-date-object": "1.0.2", + "is-regex": "1.1.1", + "object-is": "1.1.3", + "object-keys": "1.1.1", + "regexp.prototype.flags": "1.3.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "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 + }, + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "requires": { + "execa": "1.0.0", + "ip-regex": "2.1.0" + } + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "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==", + "requires": { + "object-keys": "1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + } + } + }, + "del": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/del/-/del-5.1.0.tgz", + "integrity": "sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==", + "requires": { + "globby": "10.0.2", + "graceful-fs": "4.2.4", + "is-glob": "4.0.1", + "is-path-cwd": "2.2.0", + "is-path-inside": "3.0.2", + "p-map": "3.0.0", + "rimraf": "3.0.2", + "slash": "3.0.0" + }, + "dependencies": { + "p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "requires": { + "aggregate-error": "3.1.0" + } + } + } + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "optional": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "detab": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.3.tgz", + "integrity": "sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==" + }, + "detect-port": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.3.0.tgz", + "integrity": "sha512-E+B1gzkl2gqxt1IhUzwjrxBKRqx1UzC3WLONHinn8S3T6lwV/agVCyitiFOsGJ/eYuEUBvD71MZHy3Pv1G9doQ==", + "requires": { + "address": "1.1.2", + "debug": "2.6.9" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "4.11.9", + "miller-rabin": "4.0.1", + "randombytes": "2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "4.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=" + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "requires": { + "ip": "1.1.5", + "safe-buffer": "5.1.2" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "requires": { + "buffer-indexof": "1.1.1" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "requires": { + "utila": "0.4.0" + } + }, + "dom-helpers": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.2.0.tgz", + "integrity": "sha512-Ru5o9+V8CpunKnz5LGgWXkmrH/20cGKwcHwS4m73zIvs54CN9epEmT/HLqFJW3kXpakAFkEdzgy1hzlJe3E4OQ==", + "requires": { + "@babel/runtime": "^7.8.7", + "csstype": "^3.0.2" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "requires": { + "domelementtype": "1.3.1", + "entities": "1.1.2" + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==" + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1.3.1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" + } + }, + "dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "requires": { + "no-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "2.0.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "requires": { + "end-of-stream": "1.4.4", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "stream-shift": "1.0.1" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==" + }, + "electron-to-chromium": { + "version": "1.3.582", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.582.tgz", + "integrity": "sha512-0nCJ7cSqnkMC+kUuPs0YgklFHraWGl/xHqtZWWtOeVtyi+YqkoAOMGuZQad43DscXCQI/yizcTa3u6B5r+BLww==" + }, + "elliptic": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", + "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "requires": { + "bn.js": "4.11.9", + "brorand": "1.1.0", + "hash.js": "1.1.7", + "hmac-drbg": "1.0.1", + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" + }, + "emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "requires": { + "graceful-fs": "4.2.4", + "memory-fs": "0.5.0", + "tapable": "1.1.3" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "requires": { + "prr": "1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es-abstract": { + "version": "1.18.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.1.tgz", + "integrity": "sha512-I4UGspA0wpZXWENrdA0uHbnhte683t3qT/1VFH9aX2dA5PPSf6QW5HHXf5HImaqPmjXaVeVk4RGWnaylmV7uAA==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-negative-zero": "2.0.0", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "1.2.2", + "is-date-object": "1.0.2", + "is-symbol": "1.0.3" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "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=" + }, + "eslint": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.12.0.tgz", + "integrity": "sha512-n5pEU27DRxCSlOhJ2rO57GDLcNsxO0LPpAbpFdh7xmcDmjmlGUfoyrsB3I7yYdQXO5N3gkSTiDrPSPNFiiirXA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@eslint/eslintrc": "^0.2.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.0", + "esquery": "^1.2.0", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.19", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "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 + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.14.0.tgz", + "integrity": "sha512-DbVwh0qZhAC7CNDWcq8cBdK6FcVHiMTKmCypOPWeZkp9hJ8xYwTaWSa6bb6cjfi8KOeJy0e9a8Izxyx+O4+gCQ==", + "dev": true, + "requires": { + "get-stdin": "^6.0.0" + } + }, + "eslint-mdx": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/eslint-mdx/-/eslint-mdx-1.8.2.tgz", + "integrity": "sha512-j7mkBFr7zHLaiqGu+iWker9qwWfti29xUAuUDDad95l+H189R4++dsuSUB6u19wy6CCuspIt5I6katzbpRbbMw==", + "dev": true, + "requires": { + "espree": "^7.2.0", + "remark-mdx": "^1.6.16", + "remark-parse": "^8.0.3", + "tslib": "^2.0.1", + "unified": "^9.1.0" + }, + "dependencies": { + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + } + } + }, + "eslint-plugin-mdx": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-mdx/-/eslint-plugin-mdx-1.8.2.tgz", + "integrity": "sha512-fKkhsR1cTCHQUVcoguUmOohMo87297/H1Z0Zye3GF4ivvxcpX8fboLILLR2Em76QV8RrjP4sxrgBuOA9rBIumw==", + "dev": true, + "requires": { + "cosmiconfig": "^7.0.0", + "eslint-mdx": "^1.8.2", + "eslint-plugin-react": "^7.20.6", + "rebass": "^4.0.7", + "remark-mdx": "^1.6.16", + "remark-parse": "^8.0.3", + "remark-stringify": "^8.1.1", + "tslib": "^2.0.1", + "unified": "^9.1.0", + "vfile": "^4.1.1" + }, + "dependencies": { + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "tslib": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.3.tgz", + "integrity": "sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ==", + "dev": true + } + } + }, + "eslint-plugin-react": { + "version": "7.21.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.21.5.tgz", + "integrity": "sha512-8MaEggC2et0wSF6bUeywF7qQ46ER81irOdWS4QWxnnlAEsnzeBevk1sWh7fhpCghPpXb+8Ks7hvaft6L/xsR6g==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "array.prototype.flatmap": "^1.2.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "object.entries": "^1.1.2", + "object.fromentries": "^2.0.2", + "object.values": "^1.1.1", + "prop-types": "^15.7.2", + "resolve": "^1.18.1", + "string.prototype.matchall": "^4.0.2" + }, + "dependencies": { + "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" + } + }, + "resolve": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.18.1.tgz", + "integrity": "sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA==", + "dev": true, + "requires": { + "is-core-module": "^2.0.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "requires": { + "esrecurse": "4.3.0", + "estraverse": "4.3.0" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz", + "integrity": "sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==", + "dev": true + }, + "espree": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", + "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "esquery": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", + "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "requires": { + "estraverse": "5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, + "eta": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-1.11.0.tgz", + "integrity": "sha512-lfqIE6qD55WFYT6E0phTBUe0sapHJhfvRDB7jSpXxFGwzDaP69kQqRyF7krBe8I1QzF5nE1yAByiIOLB630x4Q==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "eval": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.4.tgz", + "integrity": "sha512-npGsebJejyjMRnLdFu+T/97dnigqIU0Ov3IGrZ8ygd1v7RL1vGkEKtvyWZobqUH1AQgKlg0Yqqe2BtMA9/QZLw==", + "requires": { + "require-like": "0.1.2" + } + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "events": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", + "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==" + }, + "eventsource": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", + "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", + "requires": { + "original": "1.0.2" + } + }, + "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==", + "requires": { + "md5.js": "1.3.5", + "safe-buffer": "5.1.2" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "requires": { + "cross-spawn": "6.0.5", + "get-stream": "4.1.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.3", + "strip-eof": "1.0.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==", + "requires": { + "nice-try": "1.0.5", + "path-key": "2.0.1", + "semver": "5.7.1", + "shebang-command": "1.2.0", + "which": "1.3.1" + } + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "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=" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "2.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=", + "requires": { + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "posix-character-classes": "0.1.1", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "requires": { + "accepts": "1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "1.1.2", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "finalhandler": "1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "1.1.2", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "2.0.6", + "qs": "6.7.0", + "range-parser": "1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "type-is": "1.6.18", + "utils-merge": "1.0.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + }, + "external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "requires": { + "chardet": "0.7.0", + "iconv-lite": "0.4.24", + "tmp": "0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "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.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-glob": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.4.tgz", + "integrity": "sha512-kr/Oo6PX51265qeuCYsyGypiO5uJFgBS0jksyG7FUeCyQzNwYnzrNIMR1NXfkZXsMYXYLRAHgISHBz8gQcxKHQ==", + "requires": { + "@nodelib/fs.stat": "2.0.3", + "@nodelib/fs.walk": "1.2.4", + "glob-parent": "5.1.1", + "merge2": "1.4.1", + "micromatch": "4.0.2", + "picomatch": "2.2.2" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "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 + }, + "fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha1-9K8+qfNNiicc9YrSs3WfQx8LMY0=", + "requires": { + "punycode": "1.3.2" + } + }, + "fastq": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.8.0.tgz", + "integrity": "sha512-SMIZoZdLh/fgofivvIkmknUXyPnvxRE3DhtZ5Me3Mrsk5gyPL42F0xr51TdRXskBxHfMp+07bcYzfsYEsSQA9Q==", + "requires": { + "reusify": "1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "requires": { + "websocket-driver": "0.6.5" + } + }, + "fbemitter": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-2.1.1.tgz", + "integrity": "sha1-Uj4U/a9SSIBbsC9i78M75wP1GGU=", + "requires": { + "fbjs": "^0.8.4" + } + }, + "fbjs": { + "version": "0.8.17", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.17.tgz", + "integrity": "sha1-xNWY6taUkRJlPWWIsBpc3Nn5D90=", + "requires": { + "core-js": "^1.0.0", + "isomorphic-fetch": "^2.1.1", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.18" + }, + "dependencies": { + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + } + } + }, + "feed": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.1.tgz", + "integrity": "sha512-l28KKcK1J/u3iq5dRDmmoB2p7dtBfACC2NqJh4dI2kFptxH0asfjmOfcxqh5Sv8suAlVa73gZJ4REY5RrafVvg==", + "requires": { + "xml-js": "^1.6.11" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "requires": { + "escape-string-regexp": "1.0.5" + } + }, + "file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "file-loader": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.1.1.tgz", + "integrity": "sha512-Klt8C4BjWSXYQAfhpYYkG4qHNTna4toMHEbWrI5IuVoxbU6uiDKeKAP99R8mmbJi3lvewn/jQBOgU4+NS3tDQw==", + "requires": { + "loader-utils": "2.0.0", + "schema-utils": "3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "filesize": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-6.0.1.tgz", + "integrity": "sha512-u4AYWPgbI5GBhs6id1KdImZWn5yfyFrrQ8OWZdN7ZMfA8Bf4HcO0BGo9bmUIEV8yrp8I1xVfJ/dn90GtFNNJcg==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.3", + "statuses": "1.5.0", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "requires": { + "commondir": "1.0.1", + "make-dir": "2.1.0", + "pkg-dir": "3.0.0" + } + }, + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "dev": true, + "optional": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "3.0.0" + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==" + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "requires": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "flux": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-3.1.3.tgz", + "integrity": "sha1-0jvtUVp5oi2TOrU6tK2hnQWy8Io=", + "requires": { + "fbemitter": "^2.0.0", + "fbjs": "^0.8.0" + } + }, + "follow-redirects": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz", + "integrity": "sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA==" + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "fork-ts-checker-webpack-plugin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz", + "integrity": "sha512-DuVkPNrM12jR41KM2e+N+styka0EgLkTnXmNcXdgOM37vtGeY+oCBK/Jx0hzSeEU6memFCtWb4htrHPMDfwwUQ==", + "requires": { + "babel-code-frame": "6.26.0", + "chalk": "2.4.2", + "chokidar": "3.4.3", + "micromatch": "3.1.10", + "minimatch": "3.0.4", + "semver": "5.7.1", + "tapable": "1.1.3", + "worker-rpc": "0.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "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=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + } + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "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=" + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "requires": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "4.2.4", + "jsonfile": "4.0.0", + "universalify": "0.1.2" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "3.1.3" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "requires": { + "graceful-fs": "4.2.4", + "iferr": "0.1.5", + "imurmurhash": "0.1.4", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "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 + }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" + }, + "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 + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "3.0.0" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + }, + "github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + }, + "dependencies": { + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=" + } + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.4", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "4.0.1" + } + }, + "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=" + }, + "global-dirs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.0.1.tgz", + "integrity": "sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A==", + "requires": { + "ini": "1.3.5" + } + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "requires": { + "global-prefix": "3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "requires": { + "ini": "1.3.5", + "kind-of": "6.0.3", + "which": "1.3.1" + }, + "dependencies": { + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "2.0.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "globby": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", + "requires": { + "@types/glob": "7.1.3", + "array-union": "2.1.0", + "dir-glob": "3.0.1", + "fast-glob": "3.2.4", + "glob": "7.1.6", + "ignore": "5.1.8", + "merge2": "1.4.1", + "slash": "3.0.0" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=", + "optional": true, + "requires": { + "delegate": "^3.1.2" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "0.14.0", + "@szmarczak/http-timer": "1.1.2", + "cacheable-request": "6.1.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.1.0", + "to-readable-stream": "1.0.0", + "url-parse-lax": "3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + }, + "gray-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.2.tgz", + "integrity": "sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==", + "requires": { + "js-yaml": "3.14.0", + "kind-of": "6.0.3", + "section-matter": "1.0.0", + "strip-bom-string": "1.0.0" + } + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "requires": { + "duplexer": "0.1.2", + "pify": "4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + } + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "requires": { + "get-value": "2.0.6", + "has-values": "1.0.0", + "isobject": "3.0.1" + } + }, + "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=", + "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=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "2.0.4", + "readable-stream": "3.6.0", + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "2.0.4", + "minimalistic-assert": "1.0.1" + } + }, + "hast-to-hyperscript": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.0.tgz", + "integrity": "sha512-NJvMYU3GlMLs7hN3CRbsNlMzusVNkYBogVWDGybsuuVQ336gFLiD+q9qtFZT2meSHzln3pNISZWTASWothMSMg==", + "requires": { + "@types/unist": "^2.0.3", + "comma-separated-tokens": "^1.0.0", + "property-information": "^5.3.0", + "space-separated-tokens": "^1.0.0", + "style-to-object": "^0.3.0", + "unist-util-is": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-from-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.0.tgz", + "integrity": "sha512-3ZYnfKenbbkhhNdmOQqgH10vnvPivTdsOJCri+APn0Kty+nRkDHArnaX9Hiaf8H+Ig+vkNptL+SRY/6RwWJk1Q==", + "requires": { + "@types/parse5": "^5.0.0", + "ccount": "^1.0.0", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0" + } + }, + "hast-util-parse-selector": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.4.tgz", + "integrity": "sha512-gW3sxfynIvZApL4L07wryYF4+C9VvH3AUi7LAnVXV4MneGEgwOByXvFo18BgmTWnm7oHAe874jKbIB1YhHSIzA==" + }, + "hast-util-raw": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", + "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", + "requires": { + "@types/hast": "^2.0.0", + "hast-util-from-parse5": "^6.0.0", + "hast-util-to-parse5": "^6.0.0", + "html-void-elements": "^1.0.0", + "parse5": "^6.0.0", + "unist-util-position": "^3.0.0", + "vfile": "^4.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hast-util-to-parse5": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", + "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", + "requires": { + "hast-to-hyperscript": "^9.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.0.0", + "xtend": "^4.0.0", + "zwitch": "^1.0.0" + } + }, + "hastscript": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-5.1.2.tgz", + "integrity": "sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==", + "requires": { + "comma-separated-tokens": "^1.0.0", + "hast-util-parse-selector": "^2.0.0", + "property-information": "^5.0.0", + "space-separated-tokens": "^1.0.0" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + }, + "history": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", + "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "requires": { + "@babel/runtime": "7.12.1", + "loose-envify": "1.4.0", + "resolve-pathname": "3.0.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3", + "value-equal": "1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "requires": { + "hash.js": "1.1.7", + "minimalistic-assert": "1.0.1", + "minimalistic-crypto-utils": "1.0.1" + } + }, + "hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "requires": { + "react-is": "16.13.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "requires": { + "inherits": "2.0.4", + "obuf": "1.1.2", + "readable-stream": "2.3.7", + "wbuf": "1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, + "html-entities": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" + }, + "html-minifier-terser": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz", + "integrity": "sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==", + "requires": { + "camel-case": "4.1.1", + "clean-css": "4.2.3", + "commander": "4.1.1", + "he": "1.2.0", + "param-case": "3.0.3", + "relateurl": "0.2.7", + "terser": "4.8.0" + } + }, + "html-tags": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + }, + "html-webpack-plugin": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz", + "integrity": "sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw==", + "requires": { + "@types/html-minifier-terser": "5.1.1", + "@types/tapable": "1.0.6", + "@types/webpack": "4.41.22", + "html-minifier-terser": "5.1.1", + "loader-utils": "1.4.0", + "lodash": "4.17.20", + "pretty-error": "2.1.2", + "tapable": "1.1.3", + "util.promisify": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "requires": { + "define-properties": "1.1.3", + "object.getownpropertydescriptors": "2.1.0" + } + } + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "requires": { + "domelementtype": "1.3.1", + "domhandler": "2.4.2", + "domutils": "1.5.1", + "entities": "1.1.2", + "inherits": "2.0.4", + "readable-stream": "3.6.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=" + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": "1.5.0", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "requires": { + "eventemitter3": "4.0.7", + "follow-redirects": "1.13.0", + "requires-port": "1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "requires": { + "http-proxy": "1.18.1", + "is-glob": "4.0.1", + "lodash": "4.17.20", + "micromatch": "3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "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=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + } + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=" + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "requires": { + "postcss": "7.0.35" + } + }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=" + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + }, + "immer": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-1.10.0.tgz", + "integrity": "sha512-O3sR1/opvCDGLEVcvrGTMtLac8GJ5IwZC4puPrLuRj3l7ICKvkmA0vGuU9OW8mV9WIBRnaxp5GJh9IEAaNOoYg==" + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "requires": { + "import-from": "2.1.0" + } + }, + "import-fresh": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", + "requires": { + "parent-module": "1.0.1", + "resolve-from": "4.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "requires": { + "pkg-dir": "3.0.0", + "resolve-cwd": "2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "infima": { + "version": "0.2.0-alpha.13", + "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.13.tgz", + "integrity": "sha512-BxCZ1pMcUF0PcL4WV07l/lvaeBBdUUw7uVqNyyeGAutzDpkDyFOl5gOv9wFAJKLo5yerPNFXxFPgDitNjctqIA==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" + }, + "inline-style-parser": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", + "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" + }, + "inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "requires": { + "ansi-escapes": "4.3.1", + "chalk": "4.1.0", + "cli-cursor": "3.1.0", + "cli-width": "3.0.0", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "6.0.0", + "through": "2.3.8" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "2.0.1" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "requires": { + "ansi-styles": "4.3.0", + "supports-color": "7.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "4.0.0" + } + } + } + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "requires": { + "default-gateway": "4.2.0", + "ipaddr.js": "1.9.1" + } + }, + "internal-slot": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.2.tgz", + "integrity": "sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g==", + "dev": true, + "requires": { + "es-abstract": "^1.17.0-next.1", + "has": "^1.0.3", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=" + }, + "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=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + }, + "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.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "2.1.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==" + }, + "is-callable": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", + "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==" + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "2.0.0" + }, + "dependencies": { + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + } + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "requires": { + "css-color-names": "0.0.4", + "hex-color-regex": "1.1.0", + "hsl-regex": "1.0.0", + "hsla-regex": "1.0.0", + "rgb-regex": "1.0.1", + "rgba-regex": "1.0.0" + } + }, + "is-core-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.0.0.tgz", + "integrity": "sha512-jq1AH6C8MuteOoBPwkxHafmByhL9j5q4OaPGdbuD+ZtQJVzH+i6E3BJDQcBA09k57i2Hh2yQbEG8yObZ0jdlWw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "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=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "requires": { + "is-accessor-descriptor": "0.1.6", + "is-data-descriptor": "0.1.4", + "kind-of": "5.1.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==" + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==" + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "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=" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "requires": { + "global-dirs": "2.0.1", + "is-path-inside": "3.0.2" + } + }, + "is-negative-zero": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.0.tgz", + "integrity": "sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE=" + }, + "is-npm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-4.0.0.tgz", + "integrity": "sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "requires": { + "is-path-inside": "2.1.0" + }, + "dependencies": { + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "requires": { + "path-is-inside": "1.0.2" + } + } + } + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==" + }, + "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=" + }, + "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==", + "requires": { + "isobject": "3.0.1" + } + }, + "is-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", + "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "requires": { + "has-symbols": "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=" + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + }, + "is-root": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "is-string": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", + "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "requires": { + "html-comment-regex": "1.1.2" + } + }, + "is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "requires": { + "has-symbols": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + }, + "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==" + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "requires": { + "is-docker": "2.1.1" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "jest-worker": { + "version": "26.5.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.5.0.tgz", + "integrity": "sha512-kTw66Dn4ZX7WpjZ7T/SUDgRhapFRKWmisVAF0Rv4Fu8SLFD7eLbqpLvbxVqYhSgaWa7I+bW7pHnbyfNsH6stug==", + "requires": { + "@types/node": "14.11.10", + "merge-stream": "2.0.0", + "supports-color": "7.2.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", + "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.1" + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "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==" + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + }, + "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==" + }, + "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 + }, + "json3": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", + "integrity": "sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA==" + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "requires": { + "minimist": "1.2.5" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "4.2.4" + } + }, + "jsx-ast-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.1.0.tgz", + "integrity": "sha512-d4/UOjg+mxAWxCiF0c5UTSwyqbchkbqCvK87aBovhnh8GtysTjWmgC63tY0cJx/HzGgm9qnA147jVBdpOiQ2RA==", + "dev": true, + "requires": { + "array-includes": "^3.1.1", + "object.assign": "^4.1.1" + } + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "requires": { + "lodash": "4.17.20", + "webpack-sources": "1.4.3" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "6.5.0" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" + }, + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "2.1.3" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "3.0.0", + "path-exists": "3.0.0" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" + }, + "lodash.chunk": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.chunk/-/lodash.chunk-4.2.0.tgz", + "integrity": "sha1-ZuXOH3btJ7QwPYxlEujRIW6BBrw=" + }, + "lodash.curry": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", + "integrity": "sha1-JI42By7ekGUB11lmIAqG2riyMXA=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "lodash.flatmap": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.flatmap/-/lodash.flatmap-4.5.0.tgz", + "integrity": "sha1-74y/QI9uSCaGYzRTBcaswLd4cC4=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.flow": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", + "integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o=" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + }, + "lodash.has": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/lodash.has/-/lodash.has-4.5.2.tgz", + "integrity": "sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + }, + "lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY=" + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" + }, + "lodash.padstart": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", + "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "lodash.pickby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz", + "integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8=" + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "requires": { + "lodash._reinterpolate": "3.0.0", + "lodash.templatesettings": "4.2.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "requires": { + "lodash._reinterpolate": "3.0.0" + } + }, + "lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + }, + "loglevel": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.7.0.tgz", + "integrity": "sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ==" + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "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==", + "requires": { + "js-tokens": "4.0.0" + } + }, + "lower-case": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "requires": { + "tslib": "1.14.1" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "4.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "requires": { + "pify": "4.0.1", + "semver": "5.7.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "requires": { + "object-visit": "1.0.1" + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + }, + "markdown-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", + "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", + "dev": true, + "requires": { + "repeat-string": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "3.1.0", + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "mdast-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", + "requires": { + "unist-util-remove": "^2.0.0" + } + }, + "mdast-util-compact": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-2.0.1.tgz", + "integrity": "sha512-7GlnT24gEwDrdAwEHrU4Vv5lLWrEer4KOkAiKT9nYstsTad7Oc1TwqT2zIMKRdZF7cTuaf+GA1E4Kv7jJh8mPA==", + "dev": true, + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-definitions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-3.0.1.tgz", + "integrity": "sha512-BAv2iUm/e6IK/b2/t+Fx69EL/AGcq/IG2S+HxHjDJGfLJtd6i9SZUS76aC9cig+IEucsqxKTR0ot3m933R3iuA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-hast": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-9.1.1.tgz", + "integrity": "sha512-vpMWKFKM2mnle+YbNgDXxx95vv0CoLU0v/l3F5oFAG5DV7qwkZVWA206LsAdOnEVyf5vQcLnb3cWJywu7mUxsQ==", + "requires": { + "@types/mdast": "^3.0.0", + "@types/unist": "^2.0.3", + "mdast-util-definitions": "^3.0.0", + "mdurl": "^1.0.0", + "unist-builder": "^2.0.0", + "unist-util-generated": "^1.0.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==" + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "requires": { + "errno": "0.1.7", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "merge-deep": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/merge-deep/-/merge-deep-3.0.2.tgz", + "integrity": "sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA==", + "requires": { + "arr-union": "3.1.0", + "clone-deep": "0.2.4", + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "microevent.ts": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/microevent.ts/-/microevent.ts-0.1.1.tgz", + "integrity": "sha512-jo1OfR4TaEwd5HOrt5+tAZ9mqT4jmpNAusXtyfNzqVm9uiSYFZlKM1wYL4oU7azZW/PxQW53wM0S6OR1JHNa2g==" + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "requires": { + "braces": "3.0.2", + "picomatch": "2.2.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==", + "requires": { + "bn.js": "4.11.9", + "brorand": "1.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "mini-create-react-context": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/mini-create-react-context/-/mini-create-react-context-0.4.0.tgz", + "integrity": "sha512-b0TytUgFSbgFJGzJqXPKCFCBWigAjpjo+Fl7Vf7ZbKRDptszpppKxXH6DRXEABZ/gcEQczeb0iZ7JvL8e8jjCA==", + "requires": { + "@babel/runtime": "7.12.1", + "tiny-warning": "1.0.3" + } + }, + "mini-css-extract-plugin": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "requires": { + "loader-utils": "1.4.0", + "normalize-url": "1.9.1", + "schema-utils": "1.0.0", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + } + } + }, + "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==" + }, + "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=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "requires": { + "yallist": "4.0.0" + } + }, + "minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "requires": { + "minipass": "3.1.3" + } + }, + "minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "requires": { + "minipass": "3.1.3" + } + }, + "minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "requires": { + "minipass": "3.1.3" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "3.1.3", + "yallist": "4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "requires": { + "concat-stream": "1.6.2", + "duplexify": "3.7.1", + "end-of-stream": "1.4.4", + "flush-write-stream": "1.1.1", + "from2": "2.3.0", + "parallel-transform": "1.2.0", + "pump": "3.0.0", + "pumpify": "1.5.1", + "stream-each": "1.2.3", + "through2": "2.0.5" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "0.1.8", + "is-extendable": "0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "1.2.5" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "requires": { + "aproba": "1.2.0", + "copy-concurrently": "1.0.5", + "fs-write-stream-atomic": "1.0.10", + "mkdirp": "0.5.5", + "rimraf": "2.7.1", + "run-queue": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "7.1.6" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "requires": { + "dns-packet": "1.3.1", + "thunky": "1.1.0" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" + }, + "mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "optional": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "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.3", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "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.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "no-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", + "requires": { + "lower-case": "2.0.1", + "tslib": "1.14.1" + } + }, + "node-emoji": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", + "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "requires": { + "lodash.toarray": "^4.4.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==" + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "requires": { + "assert": "1.5.0", + "browserify-zlib": "0.2.0", + "buffer": "4.9.2", + "console-browserify": "1.2.0", + "constants-browserify": "1.0.0", + "crypto-browserify": "3.12.0", + "domain-browser": "1.2.0", + "events": "3.2.0", + "https-browserify": "1.0.0", + "os-browserify": "0.3.0", + "path-browserify": "0.0.1", + "process": "0.11.10", + "punycode": "1.3.2", + "querystring-es3": "0.2.1", + "readable-stream": "2.3.7", + "stream-browserify": "2.0.2", + "stream-http": "2.8.3", + "string_decoder": "1.3.0", + "timers-browserify": "2.0.11", + "tty-browserify": "0.0.0", + "url": "0.11.0", + "util": "0.11.1", + "vm-browserify": "1.1.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + } + } + }, + "node-releases": { + "version": "1.1.63", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.63.tgz", + "integrity": "sha512-ukW3iCfQaoxJkSPN+iK7KznTeqDGVJatAEuXsJERYHa9tn/KaT5lBdIyxQjLEVTzSkyjJEuQ17/vaEjrOauDkg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "requires": { + "object-assign": "4.1.1", + "prepend-http": "1.0.4", + "query-string": "4.3.4", + "sort-keys": "1.1.2" + } + }, + "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=", + "requires": { + "path-key": "2.0.1" + }, + "dependencies": { + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + } + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E=" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "requires": { + "boolbase": "1.0.0" + } + }, + "null-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/null-loader/-/null-loader-3.0.0.tgz", + "integrity": "sha512-hf5sNLl8xdRho4UPBOOeoIwT3WhjYcMUQm0zj44EhD6UscMAz72o2udpoDFBgykucdEDGIcd6SXbc/G6zssbzw==", + "requires": { + "loader-utils": "1.4.0", + "schema-utils": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + } + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "requires": { + "copy-descriptor": "0.1.1", + "define-property": "0.2.5", + "kind-of": "3.2.2" + }, + "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=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==" + }, + "object-is": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.3.tgz", + "integrity": "sha512-teyqLvFWzLkq5B9ki8FVWA902UER2qkxmdA4nLf+wjOLAWgxzCWZNCxpDq9MvE8MmhWNr+I8w3BN49Vx36Y6Xg==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "requires": { + "isobject": "3.0.1" + } + }, + "object.assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.1.tgz", + "integrity": "sha512-VT/cxmx5yaoHSOTSyrCygIDFco+RsibY2NM0a4RdEeY/4KgqezwFtK1yr3U67xYhqJSlASm2pKhLVzPj2lr4bA==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.18.0-next.1", + "has-symbols": "1.0.1", + "object-keys": "1.1.1" + } + }, + "object.entries": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.2.tgz", + "integrity": "sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.fromentries": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.2.tgz", + "integrity": "sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "requires": { + "isobject": "3.0.1" + } + }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "function-bind": "1.1.1", + "has": "1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "requires": { + "mimic-fn": "2.1.0" + } + }, + "open": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.0.tgz", + "integrity": "sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw==", + "requires": { + "is-docker": "2.1.1", + "is-wsl": "2.2.0" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==" + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "requires": { + "is-wsl": "1.1.0" + }, + "dependencies": { + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + } + } + }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.4.tgz", + "integrity": "sha512-wqd6FdI2a5/FdoiCNNkEvLeA//lHHfG24Ln2Xm2qqdIk4aOlsR18jwpyOihqQ8849W3qu2DX8fOYxpvTMj+93A==", + "requires": { + "cssnano": "4.1.10", + "last-call-webpack-plugin": "3.0.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "requires": { + "url-parse": "1.4.7" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=" + }, + "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=" + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "2.3.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "requires": { + "aggregate-error": "3.1.0" + } + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "requires": { + "retry": "0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "9.6.0", + "registry-auth-token": "4.2.0", + "registry-url": "5.1.0", + "semver": "6.3.0" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "requires": { + "cyclist": "1.0.1", + "inherits": "2.0.4", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "param-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", + "requires": { + "dot-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "3.1.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "requires": { + "asn1.js": "5.4.1", + "browserify-aes": "1.2.0", + "evp_bytestokey": "1.0.3", + "pbkdf2": "3.1.1", + "safe-buffer": "5.1.2" + } + }, + "parse-entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", + "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "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-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "requires": { + "@babel/code-frame": "7.10.4", + "error-ex": "1.3.2", + "json-parse-even-better-errors": "2.3.1", + "lines-and-columns": "1.1.6" + } + }, + "parse-numeric-range": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-0.0.2.tgz", + "integrity": "sha1-tPCdQTx6282Yf26SM8e0shDJOOQ=" + }, + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "requires": { + "no-case": "3.0.3", + "tslib": "1.14.1" + } + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + }, + "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=" + }, + "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=" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "pbkdf2": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", + "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", + "requires": { + "create-hash": "1.2.0", + "create-hmac": "1.1.7", + "ripemd160": "2.0.2", + "safe-buffer": "5.1.2", + "sha.js": "2.4.11" + } + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "requires": { + "find-up": "3.0.0" + } + }, + "pkg-up": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", + "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", + "requires": { + "find-up": "3.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz", + "integrity": "sha512-7Wjy+9E3WwLOEL30D+m8TSTF7qJJUJLONBnwQp0518siuMxUQUbgZwssaFX+QKlZkjHZcw/IpZCt/H0srrntSg==", + "requires": { + "ts-pnp": "1.2.0" + } + }, + "portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "requires": { + "async": "2.6.3", + "debug": "3.2.6", + "mkdirp": "0.5.5" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.2" + } + } + } + }, + "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=" + }, + "postcss": { + "version": "7.0.35", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz", + "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==", + "requires": { + "chalk": "2.4.2", + "source-map": "0.6.1", + "supports-color": "6.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "3.0.0" + } + } + } + }, + "postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" + } + }, + "postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "requires": { + "browserslist": "4.14.5", + "color": "3.1.3", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "requires": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-font-variant": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.0.tgz", + "integrity": "sha512-M8BFYKOvCrI2aITzDad7kWuXXTm0YhGdP9Q8HanmN4EF1Hmcgs1KK5rSHylt/lUJe8yLxiSwWAHdScoEiIxztg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-initial": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.2.tgz", + "integrity": "sha512-ugA2wKonC0xeNHgirR4D3VWHs2JcU08WAi1KFLVcnb7IN89phID6Qtg2RIctWbnvp1TM2BOmDtX8GGLCKdR8YA==", + "requires": { + "lodash.template": "4.5.0", + "postcss": "7.0.35" + } + }, + "postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "requires": { + "@csstools/convert-colors": "1.4.0", + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "requires": { + "cosmiconfig": "5.2.1", + "import-cwd": "2.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "requires": { + "import-fresh": "2.0.0", + "is-directory": "0.3.1", + "js-yaml": "3.14.0", + "parse-json": "4.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "requires": { + "caller-path": "2.0.0", + "resolve-from": "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=", + "requires": { + "error-ex": "1.3.2", + "json-parse-better-errors": "1.0.2" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "requires": { + "loader-utils": "1.4.0", + "postcss": "7.0.35", + "postcss-load-config": "2.1.2", + "schema-utils": "1.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + } + } + }, + "postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "requires": { + "css-color-names": "0.0.4", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "stylehacks": "4.0.3" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "requires": { + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "cssnano-util-same-parent": "4.0.1", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2", + "vendors": "1.0.4" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "requires": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "is-color-stop": "1.1.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "requires": { + "alphanum-sort": "1.0.2", + "browserslist": "4.14.5", + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "uniqs": "2.0.0" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "requires": { + "alphanum-sort": "1.0.2", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "requires": { + "icss-utils": "4.1.1", + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4", + "postcss-value-parser": "4.1.0" + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "6.0.4" + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "requires": { + "icss-utils": "4.1.1", + "postcss": "7.0.35" + } + }, + "postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "requires": { + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "requires": { + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "requires": { + "is-absolute-url": "2.1.0", + "normalize-url": "3.3.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "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==" + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "requires": { + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "requires": { + "cssnano-util-get-arguments": "4.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "requires": { + "postcss": "7.0.35", + "postcss-values-parser": "2.0.1" + } + }, + "postcss-preset-env": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.0.tgz", + "integrity": "sha512-eU4/K5xzSFwUFJ8hTdTQzo2RBLbDVt83QZrAvI07TULOkmyQlnYlpwep+2yIK+K+0KlZO4BvFcleOCCcUtwchg==", + "requires": { + "autoprefixer": "9.8.6", + "browserslist": "4.14.5", + "caniuse-lite": "1.0.30001148", + "css-blank-pseudo": "0.1.4", + "css-has-pseudo": "0.10.0", + "css-prefers-color-scheme": "3.1.1", + "cssdb": "4.4.0", + "postcss": "7.0.35", + "postcss-attribute-case-insensitive": "4.0.2", + "postcss-color-functional-notation": "2.0.1", + "postcss-color-gray": "5.0.0", + "postcss-color-hex-alpha": "5.0.3", + "postcss-color-mod-function": "3.0.3", + "postcss-color-rebeccapurple": "4.0.1", + "postcss-custom-media": "7.0.8", + "postcss-custom-properties": "8.0.11", + "postcss-custom-selectors": "5.1.2", + "postcss-dir-pseudo-class": "5.0.0", + "postcss-double-position-gradients": "1.0.0", + "postcss-env-function": "2.0.2", + "postcss-focus-visible": "4.0.0", + "postcss-focus-within": "3.0.0", + "postcss-font-variant": "4.0.0", + "postcss-gap-properties": "2.0.0", + "postcss-image-set-function": "3.0.1", + "postcss-initial": "3.0.2", + "postcss-lab-function": "2.0.1", + "postcss-logical": "3.0.0", + "postcss-media-minmax": "4.0.0", + "postcss-nesting": "7.0.1", + "postcss-overflow-shorthand": "2.0.0", + "postcss-page-break": "2.0.0", + "postcss-place": "4.0.1", + "postcss-pseudo-class-any-link": "6.0.0", + "postcss-replace-overflow-wrap": "3.0.0", + "postcss-selector-matches": "4.0.0", + "postcss-selector-not": "4.0.0" + } + }, + "postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "requires": { + "postcss": "7.0.35", + "postcss-selector-parser": "5.0.0" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==" + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "requires": { + "cssesc": "2.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "requires": { + "browserslist": "4.14.5", + "caniuse-api": "3.0.0", + "has": "1.0.3", + "postcss": "7.0.35" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "requires": { + "cssnano-util-get-match": "4.0.0", + "has": "1.0.3", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "requires": { + "postcss": "7.0.35" + } + }, + "postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "requires": { + "balanced-match": "1.0.0", + "postcss": "7.0.35" + } + }, + "postcss-selector-not": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.0.tgz", + "integrity": "sha512-W+bkBZRhqJaYN8XAnbbZPLWMvZD1wKTu0UxtFKdhtGjWYmxhkUneoeOhRJKdAE5V7ZTlnbHfCR+6bNwK9e1dTQ==", + "requires": { + "balanced-match": "1.0.0", + "postcss": "7.0.35" + } + }, + "postcss-selector-parser": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", + "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "requires": { + "cssesc": "3.0.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1", + "util-deprecate": "1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "requires": { + "is-svg": "3.0.0", + "postcss": "7.0.35", + "postcss-value-parser": "3.3.1", + "svgo": "1.3.2" + }, + "dependencies": { + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "requires": { + "alphanum-sort": "1.0.2", + "postcss": "7.0.35", + "uniqs": "2.0.0" + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + }, + "postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", + "requires": { + "flatten": "1.0.3", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=" + }, + "prettier": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.1.2.tgz", + "integrity": "sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg==", + "dev": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "requires": { + "lodash": "4.17.20", + "renderkid": "2.0.4" + } + }, + "pretty-time": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + }, + "prism-react-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.1.1.tgz", + "integrity": "sha512-MgMhSdHuHymNRqD6KM3eGS0PNqgK9q4QF5P0yoQQvpB6jNjeSAi3jcSAz0Sua/t9fa4xDOMar9HJbLa08gl9ug==", + "requires": {} + }, + "prismjs": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.22.0.tgz", + "integrity": "sha512-lLJ/Wt9yy0AiSYBf212kK3mM5L8ycwlyTlSxHBAneXLR0nzFMlZ5y7riFPF3E33zXOF2IH95xdY5jIyZbM9z/w==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "promise": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", + "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", + "requires": { + "asap": "~2.0.3" + } + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=" + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "react-is": "16.13.1" + } + }, + "property-information": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", + "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=" + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "4.11.9", + "browserify-rsa": "4.0.1", + "create-hash": "1.2.0", + "parse-asn1": "5.1.6", + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.9", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", + "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "1.4.4", + "once": "1.4.0" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "requires": { + "duplexify": "3.7.1", + "inherits": "2.0.4", + "pump": "2.0.1" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "requires": { + "end-of-stream": "1.4.4", + "once": "1.4.0" + } + } + } + }, + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" + }, + "pupa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.0.1.tgz", + "integrity": "sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA==", + "requires": { + "escape-goat": "2.1.1" + } + }, + "pure-color": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", + "integrity": "sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4=" + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=" + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "requires": { + "object-assign": "4.1.1", + "strict-uri-encode": "1.1.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "2.1.0", + "safe-buffer": "5.1.2" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "0.6.0", + "ini": "1.3.5", + "minimist": "1.2.5", + "strip-json-comments": "2.0.1" + } + }, + "react": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react/-/react-16.13.1.tgz", + "integrity": "sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2" + } + }, + "react-base16-styling": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", + "integrity": "sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw=", + "requires": { + "base16": "^1.0.0", + "lodash.curry": "^4.0.1", + "lodash.flow": "^3.3.0", + "pure-color": "^1.2.0" + } + }, + "react-copy-to-clipboard": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.2.tgz", + "integrity": "sha512-/2t5mLMMPuN5GmdXo6TebFa8IoFxZ+KTDDqYhcDm0PhkgEzSxVvIX26G20s1EB02A4h2UZgwtfymZ3lGJm0OLg==", + "requires": { + "copy-to-clipboard": "^3", + "prop-types": "^15.5.8" + } + }, + "react-dev-utils": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-10.2.1.tgz", + "integrity": "sha512-XxTbgJnYZmxuPtY3y/UV0D8/65NKkmaia4rXzViknVnZeVlklSh8u6TnaEYPfAi/Gh1TP4mEOXHI6jQOPbeakQ==", + "requires": { + "@babel/code-frame": "7.8.3", + "address": "1.1.2", + "browserslist": "4.10.0", + "chalk": "2.4.2", + "cross-spawn": "7.0.1", + "detect-port-alt": "1.1.6", + "escape-string-regexp": "2.0.0", + "filesize": "6.0.1", + "find-up": "4.1.0", + "fork-ts-checker-webpack-plugin": "3.1.1", + "global-modules": "2.0.0", + "globby": "8.0.2", + "gzip-size": "5.1.1", + "immer": "1.10.0", + "inquirer": "7.0.4", + "is-root": "2.1.0", + "loader-utils": "1.2.3", + "open": "7.3.0", + "pkg-up": "3.1.0", + "react-error-overlay": "6.0.7", + "recursive-readdir": "2.2.2", + "shell-quote": "1.7.2", + "strip-ansi": "6.0.0", + "text-table": "0.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "requires": { + "@babel/highlight": "7.10.4" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "browserslist": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.10.0.tgz", + "integrity": "sha512-TpfK0TDgv71dzuTsEAlQiHeWQ/tiPqgNZVdv046fvNtBZrjbv2O3TsWCDU0AWGJJKCF/KsjNdLzR9hXOsh/CfA==", + "requires": { + "caniuse-lite": "1.0.30001148", + "electron-to-chromium": "1.3.582", + "node-releases": "1.1.63", + "pkg-up": "3.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==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + }, + "dependencies": { + "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=" + } + } + }, + "cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", + "requires": { + "address": "1.1.2", + "debug": "2.6.9" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "requires": { + "arrify": "1.0.1", + "path-type": "3.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "2.2.1", + "@nodelib/fs.stat": "1.1.3", + "glob-parent": "3.1.0", + "is-glob": "4.0.1", + "merge2": "1.4.1", + "micromatch": "3.1.10" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globby": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", + "integrity": "sha512-yTzMmKygLp8RUpG1Ymu2VXPSJQZjNAZPD4ywgYEaG7e4tBJeUQBO8OpXrf1RCNcEs5alsoJYPAMiIHP0cmeC7w==", + "requires": { + "array-union": "1.0.2", + "dir-glob": "2.0.0", + "fast-glob": "2.2.7", + "glob": "7.1.6", + "ignore": "3.3.10", + "pify": "3.0.0", + "slash": "1.0.0" + } + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==" + }, + "inquirer": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.4.tgz", + "integrity": "sha512-Bu5Td5+j11sCkqfqmUTiwv+tWisMtP0L7Q8WrqA2C/BbBhy1YTdFrvjjlrKq8oagA/tLQBski2Gcx/Sqyi2qSQ==", + "requires": { + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "cli-cursor": "3.1.0", + "cli-width": "2.2.1", + "external-editor": "3.1.0", + "figures": "3.2.0", + "lodash": "4.17.20", + "mute-stream": "0.0.8", + "run-async": "2.4.1", + "rxjs": "6.6.3", + "string-width": "4.2.0", + "strip-ansi": "5.2.0", + "through": "2.3.8" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "4.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", + "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "2.1.0", + "json5": "1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "4.1.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "2.3.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "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=" + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + } + } + }, + "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=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + } + } + }, + "react-dom": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.13.1.tgz", + "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "scheduler": "0.19.1" + } + }, + "react-error-overlay": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.7.tgz", + "integrity": "sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA==" + }, + "react-fast-compare": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", + "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" + }, + "react-helmet": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", + "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", + "requires": { + "object-assign": "4.1.1", + "prop-types": "15.7.2", + "react-fast-compare": "3.2.0", + "react-side-effect": "2.1.0" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-json-view": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.19.1.tgz", + "integrity": "sha512-u5e0XDLIs9Rj43vWkKvwL8G3JzvXSl6etuS5G42a8klMohZuYFQzSN6ri+/GiBptDqlrXPTdExJVU7x9rrlXhg==", + "requires": { + "flux": "^3.1.3", + "react-base16-styling": "^0.6.0", + "react-lifecycles-compat": "^3.0.4", + "react-textarea-autosize": "^6.1.0" + } + }, + "react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-loadable": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/react-loadable/-/react-loadable-5.5.0.tgz", + "integrity": "sha512-C8Aui0ZpMd4KokxRdVAm2bQtI03k2RMRNzOB+IipV3yxFTSVICv7WoUr5L9ALB5BmKO1iHgZtWM8EvYG83otdg==", + "requires": { + "prop-types": "15.7.2" + } + }, + "react-loadable-ssr-addon": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon/-/react-loadable-ssr-addon-0.3.0.tgz", + "integrity": "sha512-E+lnmDakV0k6ut6R2J77vurwCOwTKEwKlHs9S62G8ez+ujecLPcqjt3YAU8M58kIGjp2QjFlZ7F9QWkq/mr6Iw==", + "requires": { + "@babel/runtime": "7.12.1" + } + }, + "react-router": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.2.0.tgz", + "integrity": "sha512-smz1DUuFHRKdcJC0jobGo8cVbhO3x50tCL4icacOlcwDOEQPq4TMqwx3sY1TP+DvtTgz4nm3thuo7A+BK2U0Dw==", + "requires": { + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "hoist-non-react-statics": "3.3.2", + "loose-envify": "1.4.0", + "mini-create-react-context": "0.4.0", + "path-to-regexp": "1.8.0", + "prop-types": "15.7.2", + "react-is": "16.13.1", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "react-router-config": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", + "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "requires": { + "@babel/runtime": "7.12.1" + } + }, + "react-router-dom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.2.0.tgz", + "integrity": "sha512-gxAmfylo2QUjcwxI63RhQ5G85Qqt4voZpUXSEqCwykV0baaOTQDR1f0PmY8AELqIyVc0NEZUj0Gov5lNGcXgsA==", + "requires": { + "@babel/runtime": "7.12.1", + "history": "4.10.1", + "loose-envify": "1.4.0", + "prop-types": "15.7.2", + "react-router": "5.2.0", + "tiny-invariant": "1.1.0", + "tiny-warning": "1.0.3" + } + }, + "react-side-effect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.0.tgz", + "integrity": "sha512-IgmcegOSi5SNX+2Snh1vqmF0Vg/CbkycU9XZbOHJlZ6kMzTmi3yc254oB1WCkgA7OQtIAoLmcSFuHTc/tlcqXg==" + }, + "react-textarea-autosize": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-6.1.0.tgz", + "integrity": "sha512-F6bI1dgib6fSvG8so1HuArPUv+iVEfPliuLWusLF+gAKz0FbB4jLrWUrTAeq1afnPT2c9toEZYUdz/y1uKMy4A==", + "requires": { + "prop-types": "^15.6.0" + } + }, + "react-toastify": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-6.0.9.tgz", + "integrity": "sha512-StHXv+4kezHUnPyoILlvygSptQ79bxVuvKcC05yXP0FlqQgPA1ue+80BqxZZiCw2jWDGiY2MHyqBfFKf5YzZbA==", + "requires": { + "classnames": "^2.2.6", + "prop-types": "^15.7.2", + "react-transition-group": "^4.4.1" + } + }, + "react-toggle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/react-toggle/-/react-toggle-4.1.1.tgz", + "integrity": "sha512-+wXlMcSpg8SmnIXauMaZiKpR+r2wp2gMUteroejp2UTSqGTVvZLN+m9EhMzFARBKEw7KpQOwzCyfzeHeAndQGw==", + "requires": { + "classnames": "^2.2.5" + } + }, + "react-transition-group": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", + "integrity": "sha512-Djqr7OQ2aPUiYurhPalTrVy9ddmFCCzwhqQmtN+J3+3DzLO209Fdr70QrN8Z3DsglWql6iY1lDWAfpFiBtuKGw==", + "requires": { + "@babel/runtime": "^7.5.5", + "dom-helpers": "^5.0.1", + "loose-envify": "^1.4.0", + "prop-types": "^15.6.2" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "2.0.4", + "string_decoder": "1.3.0", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", + "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "requires": { + "picomatch": "2.2.2" + } + }, + "reading-time": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.2.0.tgz", + "integrity": "sha512-5b4XmKK4MEss63y0Lw0vn0Zn6G5kiHP88mUnD8UeEsyORj3sh1ghTH0/u6m1Ax9G2F4wUZrknlp6WlIsCvoXVA==" + }, + "rebass": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/rebass/-/rebass-4.0.7.tgz", + "integrity": "sha512-GJot6j6Qcr7jk1QIgf9qBoud75CGRpN8pGcEo98TSp4KNSWV01ZLvGwFKGI35oEBuNs+lpEd3+pnwkQUTSFytg==", + "dev": true, + "optional": true, + "requires": { + "reflexbox": "^4.0.6" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "1.17.0" + } + }, + "recursive-readdir": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", + "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", + "requires": { + "minimatch": "3.0.4" + } + }, + "reflexbox": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/reflexbox/-/reflexbox-4.0.6.tgz", + "integrity": "sha512-UNUL4YoJEXAPjRKHuty1tuOk+LV1nDJ2KYViDcH7lYm5yU3AQ+EKNXxPU3E14bQNK/pE09b1hYl+ZKdA94tWLQ==", + "dev": true, + "optional": true, + "requires": { + "@emotion/core": "^10.0.0", + "@emotion/styled": "^10.0.0", + "@styled-system/css": "^5.0.0", + "@styled-system/should-forward-prop": "^5.0.0", + "styled-system": "^5.0.0" + } + }, + "regenerate": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz", + "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==" + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "requires": { + "regenerate": "1.4.1" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "requires": { + "@babel/runtime": "7.12.1" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "requires": { + "extend-shallow": "3.0.2", + "safe-regex": "1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "regexp.prototype.flags": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz", + "integrity": "sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "requires": { + "regenerate": "1.4.1", + "regenerate-unicode-properties": "8.2.0", + "regjsgen": "0.5.2", + "regjsparser": "0.6.4", + "unicode-match-property-ecmascript": "1.0.4", + "unicode-match-property-value-ecmascript": "1.2.0" + } + }, + "registry-auth-token": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz", + "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==", + "requires": { + "rc": "1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "1.2.8" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==" + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "requires": { + "jsesc": "0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=" + } + } + }, + "rehype-parse": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/rehype-parse/-/rehype-parse-6.0.2.tgz", + "integrity": "sha512-0S3CpvpTAgGmnz8kiCyFLGuW5yA4OQhyNTm/nwPopZ7+PI11WnGl1TTWTGv/2hPEe/g2jRLlhVVSsoDH8waRug==", + "requires": { + "hast-util-from-parse5": "^5.0.0", + "parse5": "^5.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "hast-util-from-parse5": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-5.0.3.tgz", + "integrity": "sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==", + "requires": { + "ccount": "^1.0.3", + "hastscript": "^5.0.0", + "property-information": "^5.0.0", + "web-namespaces": "^1.1.2", + "xtend": "^4.0.1" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=" + }, + "remark-admonitions": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/remark-admonitions/-/remark-admonitions-1.2.1.tgz", + "integrity": "sha512-Ji6p68VDvD+H1oS95Fdx9Ar5WA2wcDA4kwrrhVU7fGctC6+d3uiMICu7w7/2Xld+lnU7/gi+432+rRbup5S8ow==", + "requires": { + "rehype-parse": "^6.0.2", + "unified": "^8.4.2", + "unist-util-visit": "^2.0.1" + }, + "dependencies": { + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + }, + "unified": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-8.4.2.tgz", + "integrity": "sha512-JCrmN13jI4+h9UAyKEoGcDZV+i1E7BLFuG7OsaDvTXI5P0qhHX+vZO/kOhz9jn8HGENDKbwSeB0nVOg4gVStGA==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + } + } + }, + "remark-emoji": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.1.0.tgz", + "integrity": "sha512-lDddGsxXURV01WS9WAiS9rO/cedO1pvr9tahtLhr6qCGFhHG4yZSJW3Ha4Nw9Uk1hLNmUBtPC0+m45Ms+xEitg==", + "requires": { + "emoticon": "^3.2.0", + "node-emoji": "^1.10.0", + "unist-util-visit": "^2.0.2" + } + }, + "remark-footnotes": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + }, + "remark-mdx": { + "version": "1.6.19", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.19.tgz", + "integrity": "sha512-UKK1CFatVPNhgjsIlNQ3GjVl3+6O7x7Hag6oyntFTg8s7sgq+rhWaSfM/6lW5UWU6hzkj520KYBuBlsaSriGtA==", + "requires": { + "@babel/core": "7.11.6", + "@babel/helper-plugin-utils": "7.10.4", + "@babel/plugin-proposal-object-rest-spread": "7.11.0", + "@babel/plugin-syntax-jsx": "7.10.4", + "@mdx-js/util": "1.6.19", + "is-alphabetical": "1.0.4", + "remark-parse": "8.0.3", + "unified": "9.2.0" + }, + "dependencies": { + "@babel/core": { + "version": "7.11.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.11.6.tgz", + "integrity": "sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg==", + "requires": { + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.11.6", + "@babel/helper-module-transforms": "^7.11.0", + "@babel/helpers": "^7.10.4", + "@babel/parser": "^7.11.5", + "@babel/template": "^7.10.4", + "@babel/traverse": "^7.11.5", + "@babel/types": "^7.11.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz", + "integrity": "sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.10.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz", + "integrity": "sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g==", + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "remark-parse": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", + "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", + "requires": { + "ccount": "^1.0.0", + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^2.0.0", + "vfile-location": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-squeeze-paragraphs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", + "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", + "requires": { + "mdast-squeeze-paragraphs": "^4.0.0" + } + }, + "remark-stringify": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-8.1.1.tgz", + "integrity": "sha512-q4EyPZT3PcA3Eq7vPpT6bIdokXzFGp9i85igjmhRyXWmPs0Y6/d2FYwUNotKAWyLch7g0ASZJn/KHHcHZQ163A==", + "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": "^2.0.0", + "mdast-util-compact": "^2.0.0", + "parse-entities": "^2.0.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^3.0.0", + "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=" + }, + "renderkid": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.4.tgz", + "integrity": "sha512-K2eXrSOJdq+HuKzlcjOlGoOarUu5SDguDEhE7+Ah4zuOWL40j8A/oHvLlLob9PSTNvVnBd+/q0Er1QfpEuem5g==", + "requires": { + "css-select": "1.2.0", + "dom-converter": "0.2.0", + "htmlparser2": "3.10.1", + "lodash": "4.17.20", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-like": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", + "integrity": "sha1-rW8wwTvs15cBDEaK+ndcDAprR/o=" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "requires": { + "path-parse": "1.0.6" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "requires": { + "resolve-from": "3.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=" + } + } + }, + "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==" + }, + "resolve-pathname": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "1.0.1" + } + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "requires": { + "onetime": "5.1.2", + "signal-exit": "3.0.3" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=" + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "7.1.6" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "3.1.0", + "inherits": "2.0.4" + } + }, + "run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" + }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "requires": { + "aproba": "1.2.0" + } + }, + "rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=" + }, + "rxjs": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", + "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "requires": { + "tslib": "1.14.1" + } + }, + "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==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "requires": { + "ret": "0.1.15" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "requires": { + "loose-envify": "1.4.0", + "object-assign": "4.1.1" + } + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "requires": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "section-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", + "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", + "requires": { + "extend-shallow": "2.0.1", + "kind-of": "6.0.3" + } + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=", + "optional": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=" + }, + "selfsigned": { + "version": "1.10.8", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.8.tgz", + "integrity": "sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w==", + "requires": { + "node-forge": "0.10.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "6.3.0" + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "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.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "2.3.0", + "range-parser": "1.2.1", + "statuses": "1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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==" + } + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "requires": { + "randombytes": "2.1.0" + } + }, + "serve-handler": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.3.tgz", + "integrity": "sha512-FosMqFBNrLyeiIDvP1zgO6YoTzFYHxLDEIavhlmQ+knB2Z7l1t+kGLHkZIDN7UVWqQAmKI3D20A6F6jo3nDd4w==", + "requires": { + "bytes": "3.0.0", + "content-disposition": "0.5.2", + "fast-url-parser": "1.1.3", + "mime-types": "2.1.18", + "minimatch": "3.0.4", + "path-is-inside": "1.0.2", + "path-to-regexp": "2.2.1", + "range-parser": "1.2.0" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" + }, + "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==" + }, + "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==", + "requires": { + "mime-db": "1.33.0" + } + }, + "path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + } + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "requires": { + "accepts": "1.3.7", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "1.0.3", + "http-errors": "1.6.3", + "mime-types": "2.1.27", + "parseurl": "1.3.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "requires": { + "extend-shallow": "2.0.1", + "is-extendable": "0.1.1", + "is-plain-object": "2.0.4", + "split-string": "3.1.0" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "2.0.4", + "safe-buffer": "5.1.2" + } + }, + "shallow-clone": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-0.1.2.tgz", + "integrity": "sha1-WQnodLp3EG1zrEFM/sH/yofZcGA=", + "requires": { + "is-extendable": "0.1.1", + "kind-of": "2.0.1", + "lazy-cache": "0.2.7", + "mixin-object": "2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz", + "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", + "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==" + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "requires": { + "glob": "7.1.6", + "interpret": "1.4.0", + "rechoir": "0.6.2" + } + }, + "side-channel": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.3.tgz", + "integrity": "sha512-A6+ByhlLkksFoUepsGxfj5x1gTSrs+OydsRptUxeNCabQpCFUvcwIczgOigI8vhY/OJCnPnyE9rGiwgvr9cS1g==", + "dev": true, + "requires": { + "es-abstract": "^1.18.0-next.0", + "object-inspect": "^1.8.0" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "requires": { + "is-arrayish": "0.3.2" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, + "sitemap": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-3.2.2.tgz", + "integrity": "sha512-TModL/WU4m2q/mQcrDgNANn0P4LwprM9MMvG4hu5zP4c6IIKs2YLTu6nXXnNr8ODW/WFtxKggiJ1EGn2W0GNmg==", + "requires": { + "lodash.chunk": "^4.2.0", + "lodash.padstart": "^4.6.1", + "whatwg-url": "^7.0.0", + "xmlbuilder": "^13.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "requires": { + "base": "0.11.2", + "debug": "2.6.9", + "define-property": "0.2.5", + "extend-shallow": "2.0.1", + "map-cache": "0.2.2", + "source-map": "0.5.7", + "source-map-resolve": "0.5.3", + "use": "3.1.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "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=", + "requires": { + "is-descriptor": "0.1.6" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, + "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==", + "requires": { + "define-property": "1.0.0", + "isobject": "3.0.1", + "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=", + "requires": { + "is-descriptor": "1.0.2" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "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==", + "requires": { + "kind-of": "6.0.3" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "requires": { + "is-accessor-descriptor": "1.0.0", + "is-data-descriptor": "1.0.0", + "kind-of": "6.0.3" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "sockjs": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz", + "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==", + "requires": { + "faye-websocket": "0.10.0", + "uuid": "3.4.0", + "websocket-driver": "0.6.5" + } + }, + "sockjs-client": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.4.0.tgz", + "integrity": "sha512-5zaLyO8/nri5cua0VtOrFXBPK1jbL4+1cebT/mmKA1E1ZXOvJrII75bPu0l0k843G/+iAbhEqzyKr0w/eCCj7g==", + "requires": { + "debug": "3.2.6", + "eventsource": "1.0.7", + "faye-websocket": "0.11.3", + "inherits": "2.0.4", + "json3": "3.3.3", + "url-parse": "1.4.7" + }, + "dependencies": { + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "requires": { + "ms": "2.1.2" + } + }, + "faye-websocket": { + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.3.tgz", + "integrity": "sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==", + "requires": { + "websocket-driver": "0.6.5" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "requires": { + "is-plain-obj": "1.1.0" + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "requires": { + "atob": "2.1.2", + "decode-uri-component": "0.2.0", + "resolve-url": "0.2.1", + "source-map-url": "0.4.0", + "urix": "0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "requires": { + "buffer-from": "1.1.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "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=" + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "requires": { + "debug": "4.2.0", + "handle-thing": "2.0.1", + "http-deceiver": "1.2.7", + "select-hose": "2.0.0", + "spdy-transport": "3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "requires": { + "debug": "4.2.0", + "detect-node": "2.0.4", + "hpack.js": "2.1.6", + "obuf": "1.1.2", + "readable-stream": "3.6.0", + "wbuf": "1.7.3" + } + }, + "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==", + "requires": { + "extend-shallow": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ssri": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.0.tgz", + "integrity": "sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA==", + "requires": { + "minipass": "3.1.3" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "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=", + "requires": { + "is-descriptor": "0.1.6" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "std-env": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-2.2.1.tgz", + "integrity": "sha512-IjYQUinA3lg5re/YMlwlfhqNRTzMZMqE+pezevdcTaHceqx8ngEi1alX9nNCk9Sc81fy1fLDeQoaCzeiW1yBOQ==", + "requires": { + "ci-info": "1.6.0" + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "requires": { + "inherits": "2.0.4", + "readable-stream": "2.3.7" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "requires": { + "end-of-stream": "1.4.4", + "stream-shift": "1.0.1" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "requires": { + "builtin-status-codes": "3.0.0", + "inherits": "2.0.4", + "readable-stream": "2.3.7", + "to-arraybuffer": "1.0.1", + "xtend": "4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "requires": { + "emoji-regex": "8.0.0", + "is-fullwidth-code-point": "3.0.0", + "strip-ansi": "6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "5.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz", + "integrity": "sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0", + "has-symbols": "^1.0.1", + "internal-slot": "^1.0.2", + "regexp.prototype.flags": "^1.3.0", + "side-channel": "^1.0.2" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.2", + "is-regex": "^1.1.1", + "object-inspect": "^1.8.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.1", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + } + } + } + }, + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "stringify-entities": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-3.1.0.tgz", + "integrity": "sha512-3FP+jGMmMV/ffZs86MoghGqAoqXAdxLrJP4GUdrDN1aIScYih5tuIO3eF4To5AJZ79KDZ8Fpdy7QJnK8SsL1Vg==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "xtend": "^4.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==", + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "dependencies": { + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=" + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "4.1.0" + } + }, + "strip-bom-string": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", + "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + }, + "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=" + }, + "style-to-object": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", + "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", + "requires": { + "inline-style-parser": "0.1.1" + } + }, + "styled-system": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/styled-system/-/styled-system-5.1.5.tgz", + "integrity": "sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==", + "dev": true, + "optional": true, + "requires": { + "@styled-system/background": "^5.1.2", + "@styled-system/border": "^5.1.5", + "@styled-system/color": "^5.1.2", + "@styled-system/core": "^5.1.2", + "@styled-system/flexbox": "^5.1.2", + "@styled-system/grid": "^5.1.2", + "@styled-system/layout": "^5.1.2", + "@styled-system/position": "^5.1.2", + "@styled-system/shadow": "^5.1.2", + "@styled-system/space": "^5.1.2", + "@styled-system/typography": "^5.1.2", + "@styled-system/variant": "^5.1.5", + "object-assign": "^4.1.1" + } + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "requires": { + "browserslist": "4.14.5", + "postcss": "7.0.35", + "postcss-selector-parser": "3.1.2" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "requires": { + "dot-prop": "5.3.0", + "indexes-of": "1.0.1", + "uniq": "1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "3.0.0" + } + }, + "svg-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", + "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "requires": { + "chalk": "2.4.2", + "coa": "2.0.2", + "css-select": "2.1.0", + "css-select-base-adapter": "0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "4.0.3", + "js-yaml": "3.14.0", + "mkdirp": "0.5.5", + "object.values": "1.1.1", + "sax": "1.2.4", + "stable": "0.1.8", + "unquote": "1.1.1", + "util.promisify": "1.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "requires": { + "boolbase": "1.0.0", + "css-what": "3.4.2", + "domutils": "1.7.0", + "nth-check": "1.0.2" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "requires": { + "dom-serializer": "0.1.1", + "domelementtype": "1.3.1" + } + } + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" + }, + "tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.0.5.tgz", + "integrity": "sha512-0b4HOimQHj9nXNEAA7zWwMM91Zhhba3pspja6sQbgTpynOJf+bkjBnfybNYzbpLbnwXnbyB4LOREvlyXLkCHSg==", + "requires": { + "chownr": "2.0.0", + "fs-minipass": "2.1.0", + "minipass": "3.1.3", + "minizlib": "2.1.2", + "mkdirp": "1.0.4", + "yallist": "4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, + "term-size": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.0.tgz", + "integrity": "sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw==" + }, + "terser": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "requires": { + "commander": "2.20.3", + "source-map": "0.6.1", + "source-map-support": "0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "terser-webpack-plugin": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-4.2.3.tgz", + "integrity": "sha512-jTgXh40RnvOrLQNgIkwEKnQ8rmHjHK4u+6UBEi+W+FPmvb+uo+chJXntKe7/3lW5mNysgSWD60KyesnhW8D6MQ==", + "requires": { + "cacache": "15.0.5", + "find-cache-dir": "3.3.1", + "jest-worker": "26.5.0", + "p-limit": "3.0.2", + "schema-utils": "3.0.0", + "serialize-javascript": "5.0.1", + "source-map": "0.6.1", + "terser": "5.3.6", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "requires": { + "commondir": "1.0.1", + "make-dir": "3.1.0", + "pkg-dir": "4.2.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "5.0.0", + "path-exists": "4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "4.1.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "6.3.0" + } + }, + "p-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.0.2.tgz", + "integrity": "sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg==", + "requires": { + "p-try": "2.2.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "2.3.0" + }, + "dependencies": { + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "2.2.0" + } + } + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "requires": { + "find-up": "4.1.0" + } + }, + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "terser": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.3.6.tgz", + "integrity": "sha512-145ap5v1HYx69HfLuwWaxTIlXyiSr+nSTb7ZWlJCgJn2JptuJRKziNa/zwFx9B1IU99Q055jHni74nLuuEC78w==", + "requires": { + "commander": "2.20.3", + "source-map": "0.7.3", + "source-map-support": "0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" + } + } + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "requires": { + "readable-stream": "2.3.7", + "xtend": "4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" + }, + "timers-browserify": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.11.tgz", + "integrity": "sha512-60aV6sgJ5YEbzUdn9c8kYGIqOubPoUdqQCul3SBAsRCZ40s6Y5cMcrW4dt3/k/EsbLVJNl9n6Vz3fTc+k2GeKQ==", + "requires": { + "setimmediate": "1.0.5" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "optional": true + }, + "tiny-invariant": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.1.0.tgz", + "integrity": "sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw==" + }, + "tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=" + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" + }, + "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=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "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==" + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "requires": { + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "regex-not": "1.0.2", + "safe-regex": "1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "1.0.0", + "is-extendable": "1.0.1" + } + }, + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "7.0.0" + } + }, + "toggle-selection": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz", + "integrity": "sha1-bkWxJj8gF/oKzH2J14sVuL932jI=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "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==" + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=" + }, + "trim-trailing-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz", + "integrity": "sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA==" + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==" + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==" + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "2.1.27" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "1.0.0" + } + }, + "ua-parser-js": { + "version": "0.7.22", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz", + "integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q==" + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==" + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "requires": { + "unicode-canonical-property-names-ecmascript": "1.0.4", + "unicode-property-aliases-ecmascript": "1.1.0" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "requires": { + "arr-union": "3.1.0", + "get-value": "2.0.6", + "is-extendable": "0.1.1", + "set-value": "2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "requires": { + "unique-slug": "2.0.2" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "requires": { + "imurmurhash": "0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "2.0.0" + } + }, + "unist-builder": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + }, + "unist-util-generated": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.5.tgz", + "integrity": "sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw==" + }, + "unist-util-is": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.0.2.tgz", + "integrity": "sha512-Ofx8uf6haexJwI1gxWMGg6I/dLnF2yE+KibhD3/diOqY2TinLcqHXCV6OI5gFVn3xQqDH+u0M625pfKwIwgBKQ==" + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + }, + "unist-util-remove": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.0.0.tgz", + "integrity": "sha512-HwwWyNHKkeg/eXRnE11IpzY8JT55JNM1YCwwU9YNCnfzk6s8GhPXrVBBZWiwLeATJbI7euvoGSzcy9M29UeW3g==", + "requires": { + "unist-util-is": "^4.0.0" + } + }, + "unist-util-remove-position": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", + "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", + "requires": { + "unist-util-visit": "^2.0.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", + "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.0.0", + "unist-util-visit-parents": "^3.0.0" + } + }, + "unist-util-visit-parents": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", + "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-is": "^4.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==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=" + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "requires": { + "has-value": "0.3.1", + "isobject": "3.0.1" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "requires": { + "get-value": "2.0.6", + "has-values": "0.1.4", + "isobject": "2.1.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "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=" + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + }, + "update-notifier": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-4.1.3.tgz", + "integrity": "sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A==", + "requires": { + "boxen": "4.2.0", + "chalk": "3.0.0", + "configstore": "5.0.1", + "has-yarn": "2.1.0", + "import-lazy": "2.1.0", + "is-ci": "2.0.0", + "is-installed-globally": "0.3.2", + "is-npm": "4.0.0", + "is-yarn-global": "0.3.0", + "latest-version": "5.1.0", + "pupa": "2.0.1", + "semver-diff": "3.1.1", + "xdg-basedir": "4.0.0" + } + }, + "uri-js": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", + "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "requires": { + "punycode": "2.1.1" + }, + "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==" + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "url-loader": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", + "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", + "requires": { + "loader-utils": "2.0.0", + "mime-types": "2.1.27", + "schema-utils": "3.0.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "requires": { + "@types/json-schema": "7.0.6", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2" + } + } + } + }, + "url-parse": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", + "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "requires": { + "querystringify": "2.2.0", + "requires-port": "1.0.0" + } + }, + "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=", + "requires": { + "prepend-http": "2.0.0" + }, + "dependencies": { + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + } + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "requires": { + "define-properties": "1.1.3", + "es-abstract": "1.17.7", + "has-symbols": "1.0.1", + "object.getownpropertydescriptors": "2.1.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.7", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.7.tgz", + "integrity": "sha512-VBl/gnfcJ7OercKA9MVaegWsBHFjV492syMudcnQZvt/Dw8ezpcOHYZXa/J96O8vx+g4x65YKhxOwDUh63aS5g==", + "requires": { + "es-to-primitive": "1.2.1", + "function-bind": "1.1.1", + "has": "1.0.3", + "has-symbols": "1.0.1", + "is-callable": "1.2.2", + "is-regex": "1.1.1", + "object-inspect": "1.8.0", + "object-keys": "1.1.1", + "object.assign": "4.1.1", + "string.prototype.trimend": "1.0.1", + "string.prototype.trimstart": "1.0.1" + } + } + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=" + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "v8-compile-cache": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", + "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", + "dev": true + }, + "value-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + }, + "vfile": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.0.tgz", + "integrity": "sha512-a/alcwCvtuc8OX92rqqo7PflxiCgXRFjdyoGVuYV+qbgCb0GgZJRvIgCD4+U/Kl1yhaRsaTwksF88xbPyGsgpw==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==" + } + } + }, + "vfile-location": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.1.0.tgz", + "integrity": "sha512-FCZ4AN9xMcjFIG1oGmZKo61PjwJHRVA+0/tPUP2ul4uIwjGGndIxavEMRpWn5p4xwm/ZsdXp9YNygf1ZyE4x8g==" + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "wait-file": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/wait-file/-/wait-file-1.0.5.tgz", + "integrity": "sha512-udLpJY/eOxlrMm3+XD1RLuF2oT9B7J7wiyR5/9xrvQymS6YR6trWvVhzOldHrVbLwyiRmLj9fcvsjzpSXeZHkw==", + "requires": { + "@hapi/joi": "15.1.1", + "fs-extra": "8.1.0", + "rx": "4.1.0" + }, + "dependencies": { + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==" + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "requires": { + "@hapi/address": "2.1.4", + "@hapi/bourne": "1.3.2", + "@hapi/hoek": "8.5.1", + "@hapi/topo": "3.1.6" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "requires": { + "@hapi/hoek": "8.5.1" + } + } + } + }, + "watchpack": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.4.tgz", + "integrity": "sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg==", + "requires": { + "chokidar": "3.4.3", + "graceful-fs": "4.2.4", + "neo-async": "2.6.2", + "watchpack-chokidar2": "2.0.0" + } + }, + "watchpack-chokidar2": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz", + "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==", + "optional": true, + "requires": { + "chokidar": "2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "optional": true, + "requires": { + "remove-trailing-separator": "1.1.0" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "optional": 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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "optional": true, + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.13", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "optional": 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==", + "optional": true, + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "optional": true, + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "optional": true, + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "1.5.0", + "nan": "2.14.2" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "optional": true, + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "optional": true, + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "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=", + "optional": true, + "requires": { + "binary-extensions": "1.13.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "optional": true, + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "optional": true, + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "optional": true, + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "requires": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" + } + }, + "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==", + "optional": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "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=", + "optional": true, + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "requires": { + "minimalistic-assert": "1.0.1" + } + }, + "web-namespaces": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "webpack": { + "version": "4.44.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", + "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "6.4.2", + "ajv": "6.12.6", + "ajv-keywords": "3.5.2", + "chrome-trace-event": "1.0.2", + "enhanced-resolve": "4.3.0", + "eslint-scope": "4.0.3", + "json-parse-better-errors": "1.0.2", + "loader-runner": "2.4.0", + "loader-utils": "1.4.0", + "memory-fs": "0.4.1", + "micromatch": "3.1.10", + "mkdirp": "0.5.5", + "neo-async": "2.6.2", + "node-libs-browser": "2.2.1", + "schema-utils": "1.0.0", + "tapable": "1.1.3", + "terser-webpack-plugin": "1.4.5", + "watchpack": "1.7.4", + "webpack-sources": "1.4.3" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "requires": { + "bluebird": "3.7.2", + "chownr": "1.1.4", + "figgy-pudding": "3.5.2", + "glob": "7.1.6", + "graceful-fs": "4.2.4", + "infer-owner": "1.0.4", + "lru-cache": "5.1.1", + "mississippi": "3.0.0", + "mkdirp": "0.5.5", + "move-concurrently": "1.0.1", + "promise-inflight": "1.0.1", + "rimraf": "2.7.1", + "ssri": "6.0.1", + "unique-filename": "1.1.1", + "y18n": "4.0.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" + }, + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "requires": { + "minimist": "1.2.5" + } + }, + "loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "requires": { + "big.js": "5.2.2", + "emojis-list": "3.0.0", + "json5": "1.0.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "requires": { + "yallist": "3.1.1" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "7.1.6" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "requires": { + "randombytes": "2.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "requires": { + "figgy-pudding": "3.5.2" + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "requires": { + "cacache": "12.0.4", + "find-cache-dir": "2.1.0", + "is-wsl": "1.1.0", + "schema-utils": "1.0.0", + "serialize-javascript": "4.0.0", + "source-map": "0.6.1", + "terser": "4.8.0", + "webpack-sources": "1.4.3", + "worker-farm": "1.7.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=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "requires": { + "acorn": "7.4.0", + "acorn-walk": "7.2.0", + "bfj": "6.1.2", + "chalk": "2.4.2", + "commander": "2.20.3", + "ejs": "2.7.4", + "express": "4.17.1", + "filesize": "3.6.1", + "gzip-size": "5.1.1", + "lodash": "4.17.20", + "mkdirp": "0.5.5", + "opener": "1.5.1", + "ws": "6.2.1" + }, + "dependencies": { + "acorn": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", + "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==" + } + } + }, + "webpack-dev-middleware": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz", + "integrity": "sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw==", + "requires": { + "memory-fs": "0.4.1", + "mime": "2.4.6", + "mkdirp": "0.5.5", + "range-parser": "1.2.1", + "webpack-log": "2.0.0" + }, + "dependencies": { + "mime": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz", + "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==" + } + } + }, + "webpack-dev-server": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz", + "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==", + "requires": { + "ansi-html": "0.0.7", + "bonjour": "3.5.0", + "chokidar": "2.1.8", + "compression": "1.7.4", + "connect-history-api-fallback": "1.6.0", + "debug": "4.2.0", + "del": "4.1.1", + "express": "4.17.1", + "html-entities": "1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "2.0.0", + "internal-ip": "4.3.0", + "ip": "1.1.5", + "is-absolute-url": "3.0.3", + "killable": "1.0.1", + "loglevel": "1.7.0", + "opn": "5.5.0", + "p-retry": "3.0.1", + "portfinder": "1.0.28", + "schema-utils": "1.0.0", + "selfsigned": "1.10.8", + "semver": "6.3.0", + "serve-index": "1.9.1", + "sockjs": "0.3.20", + "sockjs-client": "1.4.0", + "spdy": "4.0.2", + "strip-ansi": "3.0.1", + "supports-color": "6.1.0", + "url": "0.11.0", + "webpack-dev-middleware": "3.7.2", + "webpack-log": "2.0.0", + "ws": "6.2.1", + "yargs": "13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "requires": { + "micromatch": "3.1.10", + "normalize-path": "2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + } + } + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "requires": { + "array-uniq": "1.0.3" + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "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.3", + "snapdragon": "0.8.2", + "snapdragon-node": "2.1.1", + "split-string": "3.1.0", + "to-regex": "3.0.2" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "requires": { + "anymatch": "2.0.0", + "async-each": "1.0.3", + "braces": "2.3.2", + "fsevents": "1.2.13", + "glob-parent": "3.1.0", + "inherits": "2.0.4", + "is-binary-path": "1.0.1", + "is-glob": "4.0.1", + "normalize-path": "3.0.0", + "path-is-absolute": "1.0.1", + "readdirp": "2.2.1", + "upath": "1.2.0" + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "requires": { + "@types/glob": "7.1.3", + "globby": "6.1.0", + "is-path-cwd": "2.2.0", + "is-path-in-cwd": "2.1.0", + "p-map": "2.1.0", + "pify": "4.0.1", + "rimraf": "2.7.1" + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "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==", + "requires": { + "is-plain-object": "2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "2.0.1", + "is-number": "3.0.0", + "repeat-string": "1.6.1", + "to-regex-range": "2.1.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "0.1.1" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "1.5.0", + "nan": "2.14.2" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "requires": { + "is-glob": "3.1.0", + "path-dirname": "1.0.2" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "requires": { + "is-extglob": "2.1.1" + } + } + } + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "requires": { + "array-union": "1.0.2", + "glob": "7.1.6", + "object-assign": "4.1.1", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + }, + "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=", + "requires": { + "binary-extensions": "1.13.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "arr-diff": "4.0.0", + "array-unique": "0.3.2", + "braces": "2.3.2", + "define-property": "2.0.2", + "extend-shallow": "3.0.2", + "extglob": "2.0.4", + "fragment-cache": "0.2.1", + "kind-of": "6.0.3", + "nanomatch": "1.2.13", + "object.pick": "1.3.0", + "regex-not": "1.0.2", + "snapdragon": "0.8.2", + "to-regex": "3.0.2" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.4", + "isarray": "1.0.0", + "process-nextick-args": "2.0.1", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "requires": { + "graceful-fs": "4.2.4", + "micromatch": "3.1.10", + "readable-stream": "2.3.7" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "requires": { + "glob": "7.1.6" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "6.12.6", + "ajv-errors": "1.0.1", + "ajv-keywords": "3.5.2" + } + }, + "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==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "requires": { + "has-flag": "3.0.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=", + "requires": { + "is-number": "3.0.0", + "repeat-string": "1.6.1" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "requires": { + "ansi-colors": "3.2.4", + "uuid": "3.4.0" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "requires": { + "lodash": "4.17.20" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "requires": { + "source-list-map": "2.0.1", + "source-map": "0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } + } + }, + "webpackbar": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-4.0.0.tgz", + "integrity": "sha512-k1qRoSL/3BVuINzngj09nIwreD8wxV4grcuhHTD8VJgUbGcy8lQSPqv+bM00B7F+PffwIsQ8ISd4mIwRbr23eQ==", + "requires": { + "ansi-escapes": "4.3.1", + "chalk": "2.4.2", + "consola": "2.15.0", + "figures": "3.2.0", + "pretty-time": "1.1.0", + "std-env": "2.2.1", + "text-table": "0.2.0", + "wrap-ansi": "6.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.5.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "requires": { + "ansi-regex": "5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "4.3.0", + "string-width": "4.2.0", + "strip-ansi": "6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "2.0.1" + } + } + } + } + } + }, + "websocket-driver": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz", + "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=", + "requires": { + "websocket-extensions": "0.1.4" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + }, + "whatwg-fetch": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.4.1.tgz", + "integrity": "sha512-sofZVzE1wKwO+EYPbWfiwzaKovWiZXf4coEzjGP9b2GBVgQRLQUZ2QcuPpQExGDAW5GItpEm6Tl4OU5mywnAoQ==" + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "4.2.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "requires": { + "errno": "0.1.7" + } + }, + "worker-rpc": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/worker-rpc/-/worker-rpc-0.1.1.tgz", + "integrity": "sha512-P1WjMrUB3qgJNI9jfmpZ/htmBEjFh//6l/5y8SD9hg1Ef5zTTVVoRjTrTEzPrNBQvmhMxkoTsjOXN10GWU7aCg==", + "requires": { + "microevent.ts": "0.1.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "3.2.1", + "string-width": "3.1.0", + "strip-ansi": "5.2.0" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "0.1.4", + "is-typedarray": "1.0.0", + "signal-exit": "3.0.3", + "typedarray-to-buffer": "3.1.5" + } + }, + "ws": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", + "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "requires": { + "async-limiter": "1.0.1" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "xml-js": { + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", + "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", + "requires": { + "sax": "^1.2.4" + } + }, + "xmlbuilder": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-13.0.2.tgz", + "integrity": "sha512-Eux0i2QdDYKbdbA6AM6xE4m6ZTZr4G4xF9kahI2ukSEMCzwce2eX9WlTI5J3s+NU7hpasFsr8hWIONae7LluAQ==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yaml": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", + "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "requires": { + "cliui": "5.0.0", + "find-up": "3.0.0", + "get-caller-file": "2.0.5", + "require-directory": "2.1.1", + "require-main-filename": "2.0.0", + "set-blocking": "2.0.0", + "string-width": "3.1.0", + "which-module": "2.0.0", + "y18n": "4.0.0", + "yargs-parser": "13.1.2" + }, + "dependencies": { + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "7.0.3", + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "5.2.0" + } + } + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "requires": { + "camelcase": "5.3.1", + "decamelize": "1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + } + } + }, + "zwitch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + } + } +} diff --git a/zmk/docs/package.json b/zmk/docs/package.json new file mode 100644 index 00000000..00dc6275 --- /dev/null +++ b/zmk/docs/package.json @@ -0,0 +1,47 @@ +{ + "name": "docs", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "docusaurus start", + "build": "docusaurus build", + "serve": "docusaurus serve", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "lint": "eslint . --ext js,jsx,md,mdx", + "prettier:check": "prettier --check .", + "prettier:format": "prettier --write ." + }, + "dependencies": { + "@docusaurus/core": "^2.0.0-alpha.66", + "@docusaurus/preset-classic": "^2.0.0-alpha.66", + "@fortawesome/fontawesome-svg-core": "^1.2.32", + "@fortawesome/free-solid-svg-icons": "^5.15.1", + "@fortawesome/react-fontawesome": "^0.1.12", + "classnames": "^2.2.6", + "react": "^16.8.4", + "react-copy-to-clipboard": "^5.0.2", + "react-dom": "^16.8.4", + "react-toastify": "^6.0.9" + }, + "browserslist": { + "production": [ + ">0.2%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "devDependencies": { + "eslint": "^7.12.0", + "eslint-config-prettier": "^6.14.0", + "eslint-plugin-mdx": "^1.8.2", + "eslint-plugin-react": "^7.21.5", + "prettier": "2.1.2" + } +} diff --git a/zmk/docs/sidebars.js b/zmk/docs/sidebars.js new file mode 100644 index 00000000..15d531ec --- /dev/null +++ b/zmk/docs/sidebars.js @@ -0,0 +1,49 @@ +module.exports = { + someSidebar: { + "Getting Started": [ + "intro", + "hardware", + "faq", + "user-setup", + "customization", + "troubleshooting", + ], + Features: [ + "feature/keymaps", + "feature/displays", + "feature/encoders", + "feature/underglow", + ], + Behaviors: [ + "behavior/key-press", + "behavior/layers", + "behavior/misc", + "behavior/hold-tap", + "behavior/mod-tap", + "behavior/reset", + "behavior/bluetooth", + "behavior/outputs", + "behavior/lighting", + "behavior/power", + ], + Codes: [ + "codes/index", + "codes/keyboard-keypad", + "codes/modifiers", + "codes/editing", + "codes/media", + "codes/applications", + "codes/input-assist", + "codes/power", + ], + Development: [ + "dev-clean-room", + "dev-setup", + "dev-build-flash", + "dev-boards-shields-keymaps", + "dev-posix-board", + "dev-tests", + ], + "Dev Guides": ["dev-guide-new-shield", "dev-guide-usb-logging"], + }, +}; diff --git a/zmk/docs/src/components/codes/Context.jsx b/zmk/docs/src/components/codes/Context.jsx new file mode 100644 index 00000000..4fdcbfc0 --- /dev/null +++ b/zmk/docs/src/components/codes/Context.jsx @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; + +export default function Context({ children }) { + return

{children}

; +} + +Context.propTypes = { + children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) + .isRequired, +}; diff --git a/zmk/docs/src/components/codes/Description.jsx b/zmk/docs/src/components/codes/Description.jsx new file mode 100644 index 00000000..6d8c5f62 --- /dev/null +++ b/zmk/docs/src/components/codes/Description.jsx @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; + +const specialCharactersRegex = /(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g; + +function renderSpecialCharacters(description) { + const matches = Array.from(description.matchAll(specialCharactersRegex)); + if (matches.length == 0) return description; + let lastIndex = 0; + const parts = matches.reduce((acc, match, i) => { + const { index } = match; + const str = match[0]; + const chars = match[1]; + const meaning = match[2]; + if (index != lastIndex) { + acc.push(description.substring(lastIndex, index)); + } + const pos = str.indexOf(chars); + if (pos > 0) { + acc.push(description.substr(index, pos)); + } + acc.push( + + {description.substr(index + pos, chars.length)} + {meaning ? {meaning} : undefined} + + ); + lastIndex = index + str.length; + return acc; + }, []); + if (lastIndex < description.length) { + parts.push(description.substr(lastIndex)); + } + return parts; +} + +export default function Description({ description = "" }) { + return ( + {renderSpecialCharacters(description)} + ); +} + +Description.propTypes = { + description: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/Footnote.jsx b/zmk/docs/src/components/codes/Footnote.jsx new file mode 100644 index 00000000..c9396a30 --- /dev/null +++ b/zmk/docs/src/components/codes/Footnote.jsx @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; + +export default function Footnote({ children, symbol, id }) { + return ( +
+
{symbol}
+
{children}
+
+ ); +} + +Footnote.propTypes = { + children: PropTypes.element.isRequired, + symbol: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired, + id: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/FootnoteRef.jsx b/zmk/docs/src/components/codes/FootnoteRef.jsx new file mode 100644 index 00000000..c7b11a7d --- /dev/null +++ b/zmk/docs/src/components/codes/FootnoteRef.jsx @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; + +export default function FootnoteRef({ children, anchor }) { + return ( + + {children} + + ); +} + +FootnoteRef.propTypes = { + children: PropTypes.oneOfType([PropTypes.string, PropTypes.number]) + .isRequired, + anchor: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/FootnoteRefs.jsx b/zmk/docs/src/components/codes/FootnoteRefs.jsx new file mode 100644 index 00000000..3782c13f --- /dev/null +++ b/zmk/docs/src/components/codes/FootnoteRefs.jsx @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import FootnoteRef from "./FootnoteRef"; + +function joinReactElements(arr, delimiter) { + return arr.reduce((acc, fragment) => { + if (acc === null) { + return fragment; + } + return ( + <> + {acc} + {delimiter} + {fragment} + + ); + }, null); +} + +export default function FootnoteRefs({ footnotes }) { + return ( + + {joinReactElements( + footnotes.map((footnote) => ( + + {footnote.symbol} + + )), + ", " + )} + + ); +} + +FootnoteRefs.propTypes = { + footnotes: PropTypes.array.isRequired, +}; diff --git a/zmk/docs/src/components/codes/Footnotes.jsx b/zmk/docs/src/components/codes/Footnotes.jsx new file mode 100644 index 00000000..b382141f --- /dev/null +++ b/zmk/docs/src/components/codes/Footnotes.jsx @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import Footnote from "./Footnote"; + +export default function Footnotes({ footnotes = [], id }) { + return ( + + ); +} + +Footnotes.propTypes = { + footnotes: PropTypes.array.isRequired, + id: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/LinkIcon.jsx b/zmk/docs/src/components/codes/LinkIcon.jsx new file mode 100644 index 00000000..5bfeebd4 --- /dev/null +++ b/zmk/docs/src/components/codes/LinkIcon.jsx @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; +import { faExternalLinkAlt } from "@fortawesome/free-solid-svg-icons"; +export default function LinkIcon() { + return ; +} + +LinkIcon.propTypes = {}; diff --git a/zmk/docs/src/components/codes/Name.jsx b/zmk/docs/src/components/codes/Name.jsx new file mode 100644 index 00000000..52dc7347 --- /dev/null +++ b/zmk/docs/src/components/codes/Name.jsx @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import ToastyCopyToClipboard from "./ToastyCopyToClipboard"; + +export default function Name({ children, name }) { + return ( + + + {children} + + + ); +} + +Name.propTypes = { + children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) + .isRequired, + name: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/OsLegend.jsx b/zmk/docs/src/components/codes/OsLegend.jsx new file mode 100644 index 00000000..c53907fa --- /dev/null +++ b/zmk/docs/src/components/codes/OsLegend.jsx @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import operatingSystems from "@site/src/data/operating-systems"; + +export default function OsLegend() { + return ( +
+ {operatingSystems.map(({ key, className, heading, title }) => ( +
+ {heading} + {title} +
+ ))} +
+ ); +} + +OsLegend.propTypes = {}; diff --git a/zmk/docs/src/components/codes/OsSupport.jsx b/zmk/docs/src/components/codes/OsSupport.jsx new file mode 100644 index 00000000..2cb60c97 --- /dev/null +++ b/zmk/docs/src/components/codes/OsSupport.jsx @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import OsSupportIcon from "./OsSupportIcon"; +import FootnoteRefs from "./FootnoteRefs"; + +export default function OsSupport({ value, footnotes = [] }) { + return ( + <> + + {footnotes.length > 0 ? ( + + ) : undefined} + + ); +} + +OsSupport.propTypes = { + value: PropTypes.oneOf([true, false, null]), + footnotes: PropTypes.array.isRequired, +}; diff --git a/zmk/docs/src/components/codes/OsSupportIcon.jsx b/zmk/docs/src/components/codes/OsSupportIcon.jsx new file mode 100644 index 00000000..a518d62a --- /dev/null +++ b/zmk/docs/src/components/codes/OsSupportIcon.jsx @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; + +const Icon = ({ children, className, title }) => ( + + {children} + +); + +Icon.propTypes = { + children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) + .isRequired, + className: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, +}; + +export const Supported = () => ( + + ⭐ + +); +export const NotSupported = () => ( + + ❌ + +); +export const NotTested = () => ( + + ❔ + +); + +export default function OsSupportIcon({ value }) { + if (value === true) { + return ; + } + if (value === false) { + return ; + } + return ; +} + +OsSupportIcon.propTypes = { + value: PropTypes.oneOf([true, false, null]), +}; diff --git a/zmk/docs/src/components/codes/Table.jsx b/zmk/docs/src/components/codes/Table.jsx new file mode 100644 index 00000000..c7dd20c8 --- /dev/null +++ b/zmk/docs/src/components/codes/Table.jsx @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import TableRow from "./TableRow"; +import Footnotes from "./Footnotes"; +import LinkIcon from "./LinkIcon"; +import operatingSystems from "@site/src/data/operating-systems"; +import { getCodes } from "@site/src/hid"; +import { getGroup } from "@site/src/groups"; +import { getFootnote } from "@site/src/footnotes"; + +function extractFootnoteIds(codes) { + return Array.from( + new Set( + codes + .flatMap(({ footnotes }) => Object.values(footnotes)) + .map((refs) => (Array.isArray(refs) ? refs.flat() : refs)) + ) + ); +} + +export default function Table({ group }) { + const codes = getCodes(getGroup(group)); + + const footnotesAnchor = group + "-" + "footnotes"; + + const tableFootnotes = extractFootnoteIds(codes).map((id, i) => { + const Component = getFootnote(id); + return { + id, + anchor: footnotesAnchor, + symbol: i + 1, + value: Component ? : undefined, + }; + }); + + return ( +
+
+ + + + + + {operatingSystems.map(({ key, className, heading, title }) => ( + + ))} + + + + {Array.isArray(codes) + ? codes.map((code) => ( + + )) + : undefined} + +
NamesDescription + + + {heading} +
+ {tableFootnotes.length > 0 ? ( + + ) : undefined} + + ); +} + +Table.propTypes = { + group: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/components/codes/TableRow.jsx b/zmk/docs/src/components/codes/TableRow.jsx new file mode 100644 index 00000000..a560911f --- /dev/null +++ b/zmk/docs/src/components/codes/TableRow.jsx @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import Name from "./Name"; +import Description from "./Description"; +import Context from "./Context"; +import LinkIcon from "./LinkIcon"; +import OsSupport from "./OsSupport"; +import operatingSystems from "@site/src/data/operating-systems"; + +export default function TableRow({ + names, + description, + context = "", + clarify = false, + documentation, + os, + footnotes, + tableFootnotes, +}) { + return ( + + + {names.map((name) => ( + + {name} + + ))} + + + + {clarify && context ? {context} : undefined} + + + + + + + {operatingSystems.map(({ key, className, title }) => ( + + + (Array.isArray(footnotes[key]) && + footnotes[key].includes(id)) || + footnotes[key] == id + )} + /> + + ))} + + ); +} + +TableRow.propTypes = { + names: PropTypes.array.isRequired, + description: PropTypes.string.isRequired, + context: PropTypes.string.isRequired, + clarify: PropTypes.bool, + documentation: PropTypes.string.isRequired, + os: PropTypes.object.isRequired, + footnotes: PropTypes.object.isRequired, + tableFootnotes: PropTypes.array.isRequired, +}; diff --git a/zmk/docs/src/components/codes/ToastyContainer.jsx b/zmk/docs/src/components/codes/ToastyContainer.jsx new file mode 100644 index 00000000..ee4e3bca --- /dev/null +++ b/zmk/docs/src/components/codes/ToastyContainer.jsx @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import { ToastContainer } from "react-toastify"; +import "react-toastify/dist/ReactToastify.css"; + +export default function ToastyContainer() { + return ( + + ); +} + +ToastyContainer.propTypes = {}; diff --git a/zmk/docs/src/components/codes/ToastyCopyToClipboard.jsx b/zmk/docs/src/components/codes/ToastyCopyToClipboard.jsx new file mode 100644 index 00000000..b0e98092 --- /dev/null +++ b/zmk/docs/src/components/codes/ToastyCopyToClipboard.jsx @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import React from "react"; +import PropTypes from "prop-types"; +import { toast } from "react-toastify"; +import { CopyToClipboard } from "react-copy-to-clipboard"; + +export default function ToastyCopyToClipboard({ children, text }) { + const notify = () => + toast( + + 📋 Copied {text} + + ); + return ( +
+ {children} +
+ ); +} + +ToastyCopyToClipboard.propTypes = { + children: PropTypes.oneOfType([PropTypes.element, PropTypes.string]) + .isRequired, + text: PropTypes.string.isRequired, +}; diff --git a/zmk/docs/src/css/codes.css b/zmk/docs/src/css/codes.css new file mode 100644 index 00000000..ce2c0efd --- /dev/null +++ b/zmk/docs/src/css/codes.css @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +.codes.os.legend { + position: sticky; + z-index: 1; + top: var(--ifm-navbar-height); + width: 100%; + padding-top: 0.5em; + padding-bottom: 0.5em; + background: var(--ifm-background-color); + display: flex; + justify-content: space-between; +} + +html[data-theme="light"] .codes.os.legend { + background: white; +} + +.codes.os.legend .os { + flex: 1; + margin-left: 0.2em; + margin-right: 0.2em; + padding: 0.1em; + border: 1px var(--ifm-table-border-color) solid; + border-radius: 0.5em; + text-align: center; +} + +.codes.os.legend .os .heading { + font-weight: bold; +} + +.codes.os.legend .os .heading::after { + content: " : "; + font-weight: normal; +} + +.codes .name { + cursor: copy; +} + +.codes .name:hover { + opacity: 0.8; +} + +.codes .name:active { + color: var(--ifm-font-color-base-inverse); + background: var(--ifm-font-color-base); +} + +.codes.os.legend, +.codes table { + font-size: 0.8em; +} + +.codes table { + display: table; + font-size: 0.8em; + margin-bottom: 0; +} + +.codes th, +.codes td { + padding: 0.2rem; +} + +.codes td { + position: relative; +} + +.codes th.names, +.codes th.description { + text-align: left; +} + +.codes td.names code { + display: block; + float: left; + clear: both; + margin-top: 1px; + margin-bottom: 1px; + font-size: 0.85em; +} + +.codes .context { + display: inline; + margin: 0 0 0 0.5em; + font-size: 0.85em; +} + +.codes .context::before { + content: "("; +} + +.codes .context::after { + content: ")"; +} + +.codes .symbol { + display: inline-flex; + flex-direction: column; +} + +.codes .symbol code { + align-self: flex-start; + width: auto; +} + +.codes .symbol .meaning { + flex: 1; + font-size: 0.8em; + text-transform: uppercase; +} + +.codes td.documentation, +.codes td.os { + width: 0.1%; + min-width: 1.9rem; + text-align: center; +} + +.codes td.documentation { + font-size: 0.8em; +} + +.codes td.documentation a { + cursor: help; +} + +.codes .os { + color: black; +} + +.codes td.os { + font-size: 0.8em; +} + +.codes .not-tested { + font-weight: bold; +} + +.codes .os.windows { + background: #caedfd; +} + +.codes .os.linux { + background: #fff2ca; +} + +.codes .os.android { + background: #d8eed9; +} + +.codes .os.macos { + background: #ececec; +} + +.codes .os.ios { + background: #ffffff; +} + +.codes .footnotes { + display: flex; + width: 100%; + margin-top: 0; + margin-bottom: 0.5rem; + padding: 0.2rem 0.5rem 0.2rem 0.5rem; + border: var(--ifm-table-border-width) dashed var(--ifm-table-border-color); + border-top: 0; + font-size: 0.8em; +} + +.codes .footnotes .label { + display: block; + margin-right: 1em; + font-style: italic; +} + +.codes .footnotes .label::after { + content: ":"; +} + +.codes .footnotes .anchor { + display: block; + position: relative; + top: calc(var(--ifm-navbar-height) * -1 - 6em); + visibility: hidden; +} + +.codes .footnote { + flex: 1; + display: flex; + margin-top: 0; + margin-bottom: 0; +} + +.codes .footnote .symbol { + flex: 0; + float: left; + margin-right: 0.4em; + font-size: 0.8em; +} + +.codes .footnote .content p { + margin-top: 0; + margin-bottom: 0; +} + +.codes .footnoteRefs { + float: right; + font-size: 0.8em; +} + +.codes .footnoteRefs a { + color: black; +} diff --git a/zmk/docs/src/css/custom.css b/zmk/docs/src/css/custom.css new file mode 100644 index 00000000..d9cddb85 --- /dev/null +++ b/zmk/docs/src/css/custom.css @@ -0,0 +1,43 @@ +/* stylelint-disable docusaurus/copyright-header */ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #026fc5; + --ifm-color-primary-dark: #0264b1; + --ifm-color-primary-darker: #025ea7; + --ifm-color-primary-darkest: #014e8a; + --ifm-color-primary-light: #027ad9; + --ifm-color-primary-lighter: #0280e3; + --ifm-color-primary-lightest: #0690fc; + --ifm-code-font-size: 95%; +} + +.docusaurus-highlight-code-line { + background-color: rgb(72, 77, 91); + display: block; + margin: 0 calc(-1 * var(--ifm-pre-padding)); + padding: 0 var(--ifm-pre-padding); +} + +.video-container { + height: 0; + margin: 0; + margin-bottom: 30px; + overflow: hidden; + padding-bottom: 56.25%; + padding-top: 30px; + position: relative; +} + +.video-container iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} diff --git a/zmk/docs/src/data/footnotes.js b/zmk/docs/src/data/footnotes.js new file mode 100644 index 00000000..dabf98f5 --- /dev/null +++ b/zmk/docs/src/data/footnotes.js @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import example from "@site/docs/codes/_footnotes/example.mdx"; + +export default { + example, +}; diff --git a/zmk/docs/src/data/groups.js b/zmk/docs/src/data/groups.js new file mode 100644 index 00000000..f7ced161 --- /dev/null +++ b/zmk/docs/src/data/groups.js @@ -0,0 +1,414 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +export default { + "application-controls": [ + "K_MENU", + "C_AC_PROPERTIES", + "K_SELECT", + "C_AC_CANCEL", + "K_EXECUTE", + "C_AC_REFRESH", + "K_REFRESH", + "C_AC_STOP", + "K_STOP", + "C_AC_FORWARD", + "K_FORWARD", + "C_AC_BACK", + "K_BACK", + "C_AC_HOME", + "C_AC_BOOKMARKS", + "C_AC_NEW", + "C_AC_OPEN", + "C_AC_SAVE", + "C_AC_CLOSE", + "C_AC_EXIT", + "C_AC_PRINT", + "C_AC_FIND", + "K_FIND", + "K_FIND2", + "C_AC_SEARCH", + "C_AC_GOTO", + "C_AC_ZOOM", + "C_AC_ZOOM_IN", + "C_AC_ZOOM_OUT", + "C_AC_SCROLL_UP", + "K_SCROLL_UP", + "C_AC_SCROLL_DOWN", + "K_SCROLL_DOWN", + "C_AC_REPLY", + "C_AC_FORWARD_MAIL", + "C_AC_SEND", + "C_AC_EDIT", + "C_AC_INSERT", + "C_AC_DEL", + "C_AC_VIEW_TOGGLE", + "C_AC_DESKTOP_SHOW_ALL_WINDOWS", + "C_VOICE_COMMAND", + ], + applications: [ + "C_AL_NEXT_TASK", + "C_AL_PREVIOUS_TASK", + "C_AL_SELECT_TASK", + "C_AL_MY_COMPUTER", + "C_AL_DOCUMENTS", + "C_AL_FILE_BROWSER", + "C_AL_WWW", + "K_WWW", + "C_AL_EMAIL", + "C_AL_INSTANT_MESSAGING", + "C_AL_NETWORK_CHAT", + "C_AL_CONTACTS", + "C_AL_CALENDAR", + "C_AL_IMAGE_BROWSER", + "C_AL_AUDIO_BROWSER", + "C_AL_MOVIE_BROWSER", + "C_AL_TEXT_EDITOR", + "C_AL_WORD", + "C_AL_SPREADSHEET", + "C_AL_PRESENTATION", + "C_AL_GRAPHICS_EDITOR", + "C_AL_CALCULATOR", + "K_CALCULATOR", + "C_AL_NEWS", + "C_AL_DATABASE", + "C_AL_VOICEMAIL", + "C_AL_FINANCE", + "C_AL_TASK_MANAGER", + "C_AL_JOURNAL", + "C_AL_AV_CAPTURE_PLAYBACK", + "C_AL_SPELLCHECK", + "C_AL_SCREEN_SAVER", + "C_AL_KEYBOARD_LAYOUT", + "C_AL_CONTROL_PANEL", + "C_AL_HELP", + "K_HELP", + "C_AL_OEM_FEATURES", + "C_AL_CCC", + ], + "consumer-controls": [ + "C_CHANNEL_INC", + "C_CHANNEL_DEC", + "C_RECALL_LAST", + "C_MEDIA_VCR_PLUS", + "C_MEDIA_GUIDE", + "C_MEDIA_STEP", + "C_MEDIA_HOME", + "C_MEDIA_TV", + "C_MEDIA_CABLE", + "C_MEDIA_TUNER", + "C_MEDIA_DVD", + "C_MEDIA_CD", + "C_MEDIA_SATELLITE", + "C_MEDIA_VCR", + "C_MEDIA_TAPE", + "C_MEDIA_COMPUTER", + "C_MEDIA_WWW", + "C_MEDIA_GAMES", + "C_MEDIA_PHONE", + "C_MEDIA_VIDEOPHONE", + "C_MEDIA_MESSAGES", + "C_QUIT", + "C_HELP", + ], + "consumer-menus": [ + "C_MENU", + "C_MENU_PICK", + "C_MENU_UP", + "C_MENU_DOWN", + "C_MENU_LEFT", + "C_MENU_RIGHT", + "C_MENU_ESCAPE", + "C_MENU_INCREASE", + "C_MENU_DECREASE", + "C_RED_BUTTON", + "C_GREEN_BUTTON", + "C_BLUE_BUTTON", + "C_YELLOW_BUTTON", + ], + "cut-copy-paste": [ + "C_AC_CUT", + "K_CUT", + "C_AC_COPY", + "K_COPY", + "C_AC_PASTE", + "K_PASTE", + ], + display: [ + "C_BRIGHTNESS_INC", + "C_BRIGHTNESS_DEC", + "C_BRIGHTNESS_MINIMUM", + "C_BRIGHTNESS_MAXIMUM", + "C_BRIGHTNESS_AUTO", + "C_BACKLIGHT_TOGGLE", + "C_ASPECT", + "C_PIP", + ], + "input-assist": [ + "C_KEYBOARD_INPUT_ASSIST_NEXT", + "C_KEYBOARD_INPUT_ASSIST_PREVIOUS", + "C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP", + "C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP", + "C_KEYBOARD_INPUT_ASSIST_ACCEPT", + "C_KEYBOARD_INPUT_ASSIST_CANCEL", + ], + "keyboard-control-whitespace": [ + "ESCAPE", + "RETURN", + "RETURN2", + "SPACE", + "TAB", + "BACKSPACE", + "DELETE", + "INSERT", + ], + "keyboard-fkeys": [ + "F1", + "F2", + "F3", + "F4", + "F5", + "F6", + "F7", + "F8", + "F9", + "F10", + "F11", + "F12", + "F13", + "F14", + "F15", + "F16", + "F17", + "F18", + "F19", + "F20", + "F21", + "F22", + "F23", + "F24", + ], + "keyboard-international": [ + "INTERNATIONAL_1", + "INTERNATIONAL_2", + "INTERNATIONAL_3", + "INTERNATIONAL_4", + "INTERNATIONAL_5", + "INTERNATIONAL_6", + "INTERNATIONAL_7", + "INTERNATIONAL_8", + "INTERNATIONAL_9", + ], + "keyboard-language": [ + "LANGUAGE_1", + "LANGUAGE_2", + "LANGUAGE_3", + "LANGUAGE_4", + "LANGUAGE_5", + "LANGUAGE_6", + "LANGUAGE_7", + "LANGUAGE_8", + "LANGUAGE_9", + ], + "keyboard-letters": [ + "A", + "B", + "C", + "D", + "E", + "F", + "G", + "H", + "I", + "J", + "K", + "L", + "M", + "N", + "O", + "P", + "Q", + "R", + "S", + "T", + "U", + "V", + "W", + "X", + "Y", + "Z", + ], + "keyboard-locks": [ + "CAPSLOCK", + "LOCKING_CAPS", + "SCROLLLOCK", + "LOCKING_SCROLL", + "LOCKING_NUM", + ], + "keyboard-miscellaneous": [ + "PRINTSCREEN", + "PAUSE_BREAK", + "ALT_ERASE", + "SYSREQ", + "K_CANCEL", + "CLEAR", + "CLEAR_AGAIN", + "CRSEL", + "PRIOR", + "SEPARATOR", + "OUT", + "OPER", + "EXSEL", + "K_EDIT", + ], + "keyboard-modifiers": [ + "LEFT_SHIFT", + "RIGHT_SHIFT", + "LEFT_CONTROL", + "RIGHT_CONTROL", + "LEFT_ALT", + "RIGHT_ALT", + "LEFT_GUI", + "RIGHT_GUI", + ], + "keyboard-navigation": [ + "HOME", + "END", + "PAGE_UP", + "PAGE_DOWN", + "UP_ARROW", + "DOWN_ARROW", + "LEFT_ARROW", + "RIGHT_ARROW", + "K_APPLICATION", + ], + "keyboard-numbers": [ + "NUMBER_1", + "NUMBER_2", + "NUMBER_3", + "NUMBER_4", + "NUMBER_5", + "NUMBER_6", + "NUMBER_7", + "NUMBER_8", + "NUMBER_9", + "NUMBER_0", + ], + "keyboard-symbols": [ + "EXCLAMATION", + "AT_SIGN", + "HASH", + "DOLLAR", + "PERCENT", + "CARET", + "AMPERSAND", + "ASTERISK", + "LEFT_PARENTHESIS", + "RIGHT_PARENTHESIS", + "EQUAL", + "PLUS", + "MINUS", + "UNDERSCORE", + "SLASH", + "QUESTION", + "BACKSLASH", + "PIPE", + "NON_US_BACKSLASH", + "PIPE2", + "SEMICOLON", + "COLON", + "SINGLE_QUOTE", + "DOUBLE_QUOTES", + "COMMA", + "LESS_THAN", + "PERIOD", + "GREATER_THAN", + "LEFT_BRACKET", + "LEFT_BRACE", + "RIGHT_BRACKET", + "RIGHT_BRACE", + "GRAVE", + "TILDE", + "NON_US_HASH", + "TILDE2", + ], + keypad: ["KP_NUMLOCK", "KP_CLEAR", "CLEAR2", "KP_ENTER"], + "keypad-numbers": [ + "KP_NUMBER_1", + "KP_NUMBER_2", + "KP_NUMBER_3", + "KP_NUMBER_4", + "KP_NUMBER_5", + "KP_NUMBER_6", + "KP_NUMBER_7", + "KP_NUMBER_8", + "KP_NUMBER_9", + "KP_NUMBER_0", + ], + "keypad-operations": [ + "KP_PLUS", + "KP_MINUS", + "KP_MULTIPLY", + "KP_DIVIDE", + "KP_EQUAL", + "KP_EQUAL_AS400", + "KP_DOT", + "KP_COMMA", + "KP_LEFT_PARENTHESIS", + "KP_RIGHT_PARENTHESIS", + ], + "media-controls": [ + "C_RECORD", + "C_PLAY", + "C_PLAY_PAUSE", + "K_PLAY_PAUSE", + "C_PAUSE", + "C_STOP", + "K_STOP2", + "K_STOP3", + "C_STOP_EJECT", + "C_EJECT", + "K_EJECT", + "C_NEXT", + "K_NEXT", + "C_PREVIOUS", + "K_PREVIOUS", + "C_FAST_FORWARD", + "C_REWIND", + "C_SLOW", + "C_SLOW_TRACKING", + "C_REPEAT", + "C_RANDOM_PLAY", + "C_CAPTIONS", + "C_DATA_ON_SCREEN", + "C_SNAPSHOT", + ], + power: [ + "C_POWER", + "K_POWER", + "C_RESET", + "C_SLEEP", + "K_SLEEP", + "C_SLEEP_MODE", + "C_AL_LOGOFF", + "C_AL_LOCK", + "K_LOCK", + ], + sound: [ + "C_VOLUME_UP", + "K_VOLUME_UP", + "K_VOLUME_UP2", + "C_VOLUME_DOWN", + "K_VOLUME_DOWN", + "K_VOLUME_DOWN2", + "C_MUTE", + "K_MUTE", + "K_MUTE2", + "C_ALTERNATE_AUDIO_INCREMENT", + "C_BASS_BOOST", + ], + "undo-redo": ["C_AC_UNDO", "K_UNDO", "C_AC_REDO", "K_AGAIN"], +}; diff --git a/zmk/docs/src/data/hid-applications.js b/zmk/docs/src/data/hid-applications.js new file mode 100644 index 00000000..7cb7eda4 --- /dev/null +++ b/zmk/docs/src/data/hid-applications.js @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import usage from "../hid-usage"; +import * as pages from "./hid-usage-pages"; + +export const keyboard = usage(pages.genericDesktop, 0x06); +export const consumer = usage(pages.consumer, 0x01); diff --git a/zmk/docs/src/data/hid-usage-pages.js b/zmk/docs/src/data/hid-usage-pages.js new file mode 100644 index 00000000..ae11bc3b --- /dev/null +++ b/zmk/docs/src/data/hid-usage-pages.js @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +export const genericDesktop = 0x01; +export const key = 0x07; +export const consumer = 0x0c; diff --git a/zmk/docs/src/data/hid.js b/zmk/docs/src/data/hid.js new file mode 100644 index 00000000..d52331f9 --- /dev/null +++ b/zmk/docs/src/data/hid.js @@ -0,0 +1,7839 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import { + keyboard as keyboardApplication, + consumer as consumerApplication, +} from "./hid-applications"; + +import { key as keyPage, consumer as consumerPage } from "./hid-usage-pages"; + +import usage from "../hid-usage"; + +export default [ + { + names: ["A"], + description: "a and A", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x04), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["B"], + description: "b and B", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x05), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["C"], + description: "c and C", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x06), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["D"], + description: "d and D", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x07), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["E"], + description: "e and E", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x08), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F"], + description: "f and F", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x09), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["G"], + description: "g and G", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["H"], + description: "h and H", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["I"], + description: "i and I", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["J"], + description: "j and J", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["K"], + description: "k and K", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["L"], + description: "l and L", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x0f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["M"], + description: "m and M", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x10), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["N"], + description: "n and N", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x11), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["O"], + description: "o and O", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x12), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["P"], + description: "p and P", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x13), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["Q"], + description: "q and Q", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x14), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["R"], + description: "r and R", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x15), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["S"], + description: "s and S", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x16), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["T"], + description: "t and T", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x17), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["U"], + description: "u and U", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x18), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=83", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["V"], + description: "v and V", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x19), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["W"], + description: "w and W", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["X"], + description: "x and X", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["Y"], + description: "y and Y", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["Z"], + description: "z and Z", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_1", "N1"], + description: "1 and ! [Exclamation]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["EXCLAMATION", "EXCL"], + description: "! [Exclamation]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1e), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_2", "N2"], + description: "2 and @ [At Sign]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["AT_SIGN", "AT"], + description: "@ [At Sign]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x1f), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_3", "N3"], + description: "3 and # [Hash / Pound]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x20), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["HASH", "POUND"], + description: "# [Hash / Pound]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x20), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_4", "N4"], + description: "4 and $ [Dollar]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x21), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["DOLLAR", "DLLR"], + description: "$ [Dollar]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x21), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_5", "N5"], + description: "5 and % [Percent]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x22), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PERCENT", "PRCNT"], + description: "% [Percent]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x22), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_6", "N6"], + description: "6 and ^ [Caret]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x23), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["CARET"], + description: "^ [Caret]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x23), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_7", "N7"], + description: "7 and & [Ampersand]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x24), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["AMPERSAND", "AMPS"], + description: "& [Ampersand]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x24), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_8", "N8"], + description: "8 and * [Asterisk / Star]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x25), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["ASTERISK", "ASTRK", "STAR"], + description: "* [Asterisk / Star]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x25), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_9", "N9"], + description: "9 and ( [Left Parenthesis]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x26), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_PARENTHESIS", "LPAR"], + description: "( [Left Parenthesis]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x26), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NUMBER_0", "N0"], + description: "0 and ) [Right Parenthesis]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x27), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_PARENTHESIS", "RPAR"], + description: ") [Right Parenthesis]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x27), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RETURN", "ENTER", "RET"], + description: "Return (Enter)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x28), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["ESCAPE", "ESC"], + description: "Escape", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x29), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["BACKSPACE", "BSPC"], + description: "Backspace", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["TAB"], + description: "Tab", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["SPACE"], + description: "Space", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["MINUS"], + description: "- [Minus] and _ [Underscore]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["UNDERSCORE", "UNDER"], + description: "_ [Underscore]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2d), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["EQUAL"], + description: "= [Equal] and + [Plus]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PLUS"], + description: "+ [Plus]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2e), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_BRACKET", "LBKT"], + description: "[ [Left Bracket] and { [Left Brace]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_BRACE", "LBRC"], + description: "{ [Left Brace]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x2f), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_BRACKET", "RBKT"], + description: "] [Right Bracket] and } [Right Brace]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x30), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_BRACE", "RBRC"], + description: "} [Right Brace]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x30), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["BACKSLASH", "BSLH"], + description: "\\ [Backslash] and | [Pipe]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x31), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PIPE"], + description: "| [Pipe]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x31), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["NON_US_HASH"], + description: "Non-US # [Hash/Pound] and ~ [Tilde]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x32), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["TILDE2"], + description: "~ [Tilde]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x32), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["SEMICOLON", "SEMI"], + description: "; [Semicolon] and : [Colon]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x33), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["COLON"], + description: ": [Colon]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x33), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["SINGLE_QUOTE", "SQT", "APOSTROPHE", "APOS"], + description: "' [Apostrophe] and \" [Quote (Double)]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x34), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["DOUBLE_QUOTES", "DQT"], + description: '" [Quote (Double)]', + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x34), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["GRAVE"], + description: "` [Grave Accent] and ~ [Tilde]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x35), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["TILDE"], + description: "~ [Tilde]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x35), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["COMMA"], + description: ", [Comma] and < [Less Than]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x36), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LESS_THAN", "LT"], + description: "< [Less Than]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x36), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PERIOD", "DOT"], + description: ". [Period] and > [Greater Than]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x37), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["GREATER_THAN", "GT"], + description: "> [Greater Than]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x37), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["SLASH", "FSLH"], + description: "/ [Forward Slash] and ? [Question Mark]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x38), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["QUESTION", "QMARK"], + description: "? [Question Mark]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x38), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["CAPSLOCK", "CAPS", "CLCK"], + description: "Caps Lock", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x39), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F1"], + description: "F1", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F2"], + description: "F2", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F3"], + description: "F3", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F4"], + description: "F4", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=84", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F5"], + description: "F5", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F6"], + description: "F6", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x3f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F7"], + description: "F7", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x40), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F8"], + description: "F8", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x41), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F9"], + description: "F9", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x42), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F10"], + description: "F10", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x43), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F11"], + description: "F11", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x44), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["F12"], + description: "F12", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x45), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PRINTSCREEN", "PSCRN"], + description: "Print Screen", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x46), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["SCROLLLOCK", "SLCK"], + description: "Scroll Lock", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x47), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PAUSE_BREAK"], + description: "Pause / Break", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x48), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["INSERT", "INS"], + description: "Insert", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x49), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["HOME"], + description: "Home", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PAGE_UP", "PG_UP"], + description: "Page Up", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["DELETE", "DEL"], + description: "Delete", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["END"], + description: "End", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PAGE_DOWN", "PG_DN"], + description: "Page Down", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_ARROW", "RIGHT"], + description: "⮕ [Right Arrow]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x4f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_ARROW", "LEFT"], + description: "⬅ [Left Arrow]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x50), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["DOWN_ARROW", "DOWN"], + description: "⬇ [Down Arrow]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x51), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["UP_ARROW", "UP"], + description: "⬆ [Up Arrow]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x52), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["KP_NUMLOCK", "KP_NUM", "KP_NLCK"], + description: "Numlock and Clear", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x53), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["CLEAR2"], + description: "Clear", + context: "Keypad", + clarify: null, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x53), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_DIVIDE", "KP_SLASH"], + description: "/ [Divide]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x54), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_MULTIPLY", "KP_ASTERISK"], + description: "* [Multiply]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x55), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_MINUS", "KP_SUBTRACT"], + description: "- [Minus]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x56), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_PLUS"], + description: "+ [Plus]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x57), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_ENTER"], + description: "Enter", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x58), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_1", "KP_N1"], + description: "1", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x59), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_2", "KP_N2"], + description: "2", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_3", "KP_N3"], + description: "3", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_4", "KP_N4"], + description: "4", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_5", "KP_N5"], + description: "5", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_6", "KP_N6"], + description: "6", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_7", "KP_N7"], + description: "7", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x5f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_8", "KP_N8"], + description: "8", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x60), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_9", "KP_N9"], + description: "9", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x61), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_NUMBER_0", "KP_N0"], + description: "0", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x62), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=85", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_DOT"], + description: ". [Dot]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x63), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: null, + }, + footnotes: {}, + }, + { + names: ["NON_US_BACKSLASH", "NON_US_BSLH"], + description: "Non-US \\ [Backslash] and | [Pipe]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x64), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["PIPE2"], + description: "| [Pipe]", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x64), + }, + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["K_APPLICATION", "K_APP", "K_CONTEXT_MENU", "K_CMENU"], + description: "Application (Context Menu)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x65), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_POWER", "K_PWR"], + description: "Power", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x66), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: false, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_EQUAL"], + description: "= [Equal]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x67), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F13"], + description: "F13", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x68), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F14"], + description: "F14", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x69), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F15"], + description: "F15", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F16"], + description: "F16", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F17"], + description: "F17", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F18"], + description: "F18", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F19"], + description: "F19", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F20"], + description: "F20", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x6f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F21"], + description: "F21", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x70), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F22"], + description: "F22", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x71), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F23"], + description: "F23", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x72), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["F24"], + description: "F24", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x73), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_EXECUTE", "K_EXEC"], + description: "Execute", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x74), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_HELP"], + description: "Help", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x75), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_MENU"], + description: "Menu", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x76), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_SELECT"], + description: "Select", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x77), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_STOP"], + description: "Stop", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x78), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_AGAIN", "K_REDO"], + description: "Again", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x79), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_UNDO"], + description: "Undo", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_CUT"], + description: "Cut", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_COPY"], + description: "Copy", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_PASTE"], + description: "Paste", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_FIND"], + description: "Find", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_MUTE"], + description: "Mute", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x7f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_VOLUME_UP", "K_VOL_UP"], + description: "Volume Up", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x80), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_VOLUME_DOWN", "K_VOL_DN"], + description: "Volume Down", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x81), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LOCKING_CAPS", "LCAPS"], + description: "Locking Caps Lock", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x82), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LOCKING_NUM", "LNLCK"], + description: "Locking Num Lock", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x83), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LOCKING_SCROLL", "LSLCK"], + description: "Locking Scroll Lock", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x84), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_COMMA"], + description: ", [Comma]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x85), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_EQUAL_AS400"], + description: "= [Equal] (AS/400 keyboards)", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x86), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_1", "INT1", "INT_RO"], + description: "ろ (International 1)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x87), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_2", "INT2", "INT_KATAKANAHIRAGANA", "INT_KANA"], + description: "かな (International 2)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x88), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_3", "INT3", "INT_YEN"], + description: "¥ (International 3)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x89), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_4", "INT4", "INT_HENKAN"], + description: "変換 (International 4)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_5", "INT5", "INT_MUHENKAN"], + description: "無変換 (International 5)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_6", "INT6", "INT_KPJPCOMMA"], + description: ", [カソマ] (International 6)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_7", "INT7"], + description: "International 7", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_8", "INT8"], + description: "International 8", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["INTERNATIONAL_9", "INT9"], + description: "International 9", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x8f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_1", "LANG1", "LANG_HANGEUL"], + description: "한/영 (Language 1)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x90), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_2", "LANG2", "LANG_HANJA"], + description: "한자 (Language 2)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x91), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_3", "LANG3", "LANG_KATAKANA"], + description: "カタカナ (Language 3)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x92), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_4", "LANG4", "LANG_HIRAGANA"], + description: "ひらがな (Language 4)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x93), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_5", "LANG5", "LANG_ZENKAKUHANKAKU"], + description: "半角/全角 (Language 5)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x94), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_6", "LANG6"], + description: "Language 6", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x95), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_7", "LANG7"], + description: "Language 7", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x96), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_8", "LANG8"], + description: "Language 8", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x97), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LANGUAGE_9", "LANG9"], + description: "Language 9", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x98), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["ALT_ERASE"], + description: "Alternate Erase", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x99), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["SYSREQ", "ATTENTION"], + description: "SysReq / Attention", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_CANCEL"], + description: "Cancel", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["CLEAR"], + description: "Clear", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["PRIOR"], + description: "Prior", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["RETURN2", "RET2"], + description: "Return", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["SEPARATOR"], + description: "Separator", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0x9f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["OUT"], + description: "Out", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xa0), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["OPER"], + description: "Oper", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xa1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["CLEAR_AGAIN"], + description: "Clear / Again", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xa2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["CRSEL"], + description: "CrSel / Props", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xa3), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["EXSEL"], + description: "ExSel", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xa4), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_LEFT_PARENTHESIS", "KP_LPAR"], + description: "( [Left Parenthesis]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xb6), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_RIGHT_PARENTHESIS", "KP_RPAR"], + description: ") [Right Parenthesis]", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xb7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=87", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["KP_CLEAR"], + description: "Clear", + context: "Keypad", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xd8), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["LEFT_CONTROL", "LCTRL", "LC(code)"], + description: "Left Control", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe0), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_SHIFT", "LSHFT", "LS(code)"], + description: "Left Shift ⇧", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["LEFT_ALT", "LALT", "LA(code)"], + description: "Left Alt", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: [ + "LEFT_GUI", + "LGUI", + "LG(code)", + "LEFT_WIN", + "LWIN", + "LEFT_COMMAND", + "LCMD", + "LEFT_META", + "LMETA", + ], + description: "Left GUI (Windows / Command / Meta)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe3), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_CONTROL", "RCTRL", "RC(code)"], + description: "Right Control", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe4), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=88", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_SHIFT", "RSHFT", "RS(code)"], + description: "Right Shift ⇧", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe5), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=89", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["RIGHT_ALT", "RALT", "RA(code)"], + description: "Right Alt", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe6), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=89", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: [ + "RIGHT_GUI", + "RGUI", + "RG(code)", + "RIGHT_WIN", + "RWIN", + "RIGHT_COMMAND", + "RCMD", + "RIGHT_META", + "RMETA", + ], + description: "Right GUI (Windows / Command / Meta)", + context: "Keyboard", + clarify: false, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=89", + os: { + windows: true, + linux: true, + android: true, + macos: true, + ios: true, + }, + footnotes: {}, + }, + { + names: ["K_PLAY_PAUSE", "K_PP"], + description: "Play / Pause", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe8), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_STOP2"], + description: "Stop", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xe9), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_PREVIOUS", "K_PREV"], + description: "Previous", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xea), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_NEXT"], + description: "Next", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xeb), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_EJECT"], + description: "Eject", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xec), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_VOLUME_UP2", "K_VOL_UP2"], + description: "Volume Up", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xed), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_VOLUME_DOWN2", "K_VOL_DN2"], + description: "Volume Down", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xee), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_MUTE2"], + description: "Mute", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xef), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_WWW"], + description: "Internet Browser", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf0), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_BACK"], + description: "Back", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf1), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_FORWARD"], + description: "Forward", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf2), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_STOP3"], + description: "Stop", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf3), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_FIND2"], + description: "Find", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf4), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_SCROLL_UP"], + description: "Scroll Up", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf5), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_SCROLL_DOWN"], + description: "Scroll Down", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf6), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_EDIT"], + description: "Edit", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf7), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_SLEEP"], + description: "Sleep", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf8), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_LOCK", "K_SCREENSAVER", "K_COFFEE"], + description: "Lock", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xf9), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_REFRESH"], + description: "Refresh", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xfa), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["K_CALCULATOR", "K_CALC"], + description: "Calculator", + context: "Keyboard", + clarify: true, + usages: [ + { + application: keyboardApplication, + item: usage(keyPage, 0xfb), + }, + ], + documentation: + "https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_POWER", "C_PWR"], + description: "Power", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x30), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=132", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_RESET"], + description: "Reset", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x31), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=132", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_SLEEP"], + description: "Sleep", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x32), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=132", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_SLEEP_MODE"], + description: "Sleep Mode", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x34), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=132", + os: { + windows: null, + linux: false, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU"], + description: "Menu", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x40), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_PICK", "C_MENU_SELECT"], + description: "Pick", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x41), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_UP"], + description: "Up", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x42), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_DOWN"], + description: "Down", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x43), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_LEFT"], + description: "Left", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x44), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_RIGHT"], + description: "Right", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x45), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_ESCAPE", "C_MENU_ESC"], + description: "Escape", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x46), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_INCREASE", "C_MENU_INC"], + description: "Value Increase", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x47), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MENU_DECREASE", "C_MENU_DEC"], + description: "Value Decrease", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x48), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_DATA_ON_SCREEN"], + description: "Data On Screen", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x60), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_CAPTIONS", "C_SUBTITILES"], + description: "Closed Caption", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x61), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_SNAPSHOT"], + description: "Snapshot", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x65), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_PIP"], + description: "Picture-in-Picture Toggle", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x67), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: false, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_RED_BUTTON", "C_RED"], + description: "Red Button", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x69), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_GREEN_BUTTON", "C_GREEN"], + description: "Green Button", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x6a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BLUE_BUTTON", "C_BLUE"], + description: "Blue Button", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x6b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_YELLOW_BUTTON", "C_YELLOW"], + description: "Yellow Button", + context: "Consumer Menu", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x6c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=133", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_ASPECT"], + description: "Aspect", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x6d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BRIGHTNESS_INC", "C_BRI_INC", "C_BRI_UP"], + description: "Increase Brightness", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x6f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BRIGHTNESS_DEC", "C_BRI_DEC", "C_BRI_DN"], + description: "Decrease Brightness", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x70), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BACKLIGHT_TOGGLE", "C_BKLT_TOG"], + description: "Backlight Toggle", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x72), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BRIGHTNESS_MINIMUM", "C_BRI_MIN"], + description: "Minimum Brightness", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x73), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BRIGHTNESS_MAXIMUM", "C_BRI_MAX"], + description: "Maximum Brightness", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x74), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BRIGHTNESS_AUTO", "C_BRI_AUTO"], + description: "Auto Brightness", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x75), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_STEP", "C_MODE_STEP"], + description: "Mode Step", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x82), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_RECALL_LAST", "C_CHAN_LAST"], + description: "Recall Last", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x83), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_COMPUTER"], + description: "Computer", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x88), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_TV"], + description: "TV", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x89), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_WWW"], + description: "WWW", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_DVD"], + description: "DVD", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_PHONE"], + description: "Telephone", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_GUIDE"], + description: "Program Guide", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_VIDEOPHONE"], + description: "Video Phone", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_GAMES"], + description: "Games", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x8f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_MESSAGES"], + description: "Messages", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x90), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_CD"], + description: "CD", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x91), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_VCR"], + description: "VCR", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x92), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_TUNER"], + description: "Tuner", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x93), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_QUIT"], + description: "Quit", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x94), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_HELP"], + description: "Help", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x95), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_TAPE"], + description: "Tape", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x96), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_CABLE"], + description: "Cable", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x97), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_SATELLITE"], + description: "Satellite", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x98), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_HOME"], + description: "Home", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x9a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=136", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_CHANNEL_INC", "C_CHAN_INC"], + description: "Channel Increment", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x9c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=136", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_CHANNEL_DEC", "C_CHAN_DEC"], + description: "Channel Decrement", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x9d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=136", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MEDIA_VCR_PLUS"], + description: "VCR Plus", + context: "Consumer Media", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xa0), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=135", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_PLAY"], + description: "Play", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb0), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_PAUSE"], + description: "Pause", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_RECORD", "C_REC"], + description: "Record", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_FAST_FORWARD", "C_FF"], + description: "Fast Forward", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb3), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_REWIND", "C_RW"], + description: "Rewind", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb4), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_NEXT"], + description: "Next", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb5), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_PREVIOUS", "C_PREV"], + description: "Previous", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb6), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_STOP"], + description: "Stop", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_EJECT"], + description: "Eject", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb8), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_RANDOM_PLAY", "C_SHUFFLE"], + description: "Random Play", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xb9), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_REPEAT"], + description: "Repeat", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xbc), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_SLOW_TRACKING", "C_SLOW2"], + description: "Slow Tracking", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xbf), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_STOP_EJECT"], + description: "Stop / Eject", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xcc), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: false, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_PLAY_PAUSE", "C_PP"], + description: "Play / Pause", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xcd), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_VOICE_COMMAND"], + description: "Voice Command", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xcf), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=132", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_MUTE"], + description: "Mute", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xe2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_BASS_BOOST"], + description: "Bass Boost", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xe5), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_VOLUME_UP", "C_VOL_UP"], + description: "Volume Up", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xe9), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_VOLUME_DOWN", "C_VOL_DN"], + description: "Volume Down", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xea), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=139", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_SLOW"], + description: "Slow", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0xf5), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=141", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_ALTERNATE_AUDIO_INCREMENT", "C_ALT_AUDIO_INC"], + description: "Alternate Audio Increment", + context: "Consumer", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x173), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf", + os: { + windows: null, + linux: false, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_CCC"], + description: "Consumer Control Configuration", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x183), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_WORD"], + description: "Word Processor", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x184), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_TEXT_EDITOR"], + description: "Text Editor", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x185), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_SPREADSHEET", "C_AL_SHEET"], + description: "Spreadsheet", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x186), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_GRAPHICS_EDITOR"], + description: "Graphics Editor", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x187), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_PRESENTATION"], + description: "Presentation", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x188), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_DATABASE", "C_AL_DB"], + description: "Database App", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x189), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_EMAIL", "C_AL_MAIL"], + description: "Email Reader", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_NEWS"], + description: "Newsreader", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_VOICEMAIL"], + description: "Voicemail", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_CONTACTS", "C_AL_ADDRESS_BOOK"], + description: "Contacts / Address Book", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_CALENDAR", "C_AL_CAL"], + description: "Calendar / Schedule", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_TASK_MANAGER"], + description: "Task / Project Manager", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x18f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_JOURNAL"], + description: "Log / Journal / Timecard", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x190), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_FINANCE"], + description: "Checkbook / Finance", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x191), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_CALCULATOR", "C_AL_CALC"], + description: "Calculator", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x192), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_AV_CAPTURE_PLAYBACK"], + description: "A/V Capture / Playback", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x193), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_MY_COMPUTER"], + description: "Local Machine Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x194), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_WWW"], + description: "Internet Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x196), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=147", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_NETWORK_CHAT", "C_AL_CHAT"], + description: "Network Chat", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x199), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_LOGOFF"], + description: "Logoff", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x19c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_LOCK", "C_AL_SCREENSAVER", "C_AL_COFFEE"], + description: "Terminal Lock / Screensaver", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x19e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_CONTROL_PANEL"], + description: "Control Panel", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x19f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_SELECT_TASK"], + description: "Select Task / Application", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1a2), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_NEXT_TASK"], + description: "Next Task / Application", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1a3), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_PREVIOUS_TASK", "C_AL_PREV_TASK"], + description: "Previous Task / Application", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1a4), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_HELP"], + description: "Integrated Help Center", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1a6), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_DOCUMENTS", "C_AL_DOCS"], + description: "Documents", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1a7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_SPELLCHECK", "C_AL_SPELL"], + description: "Spell Check", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1ab), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_KEYBOARD_LAYOUT"], + description: "Keyboard Layout", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1ae), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_SCREEN_SAVER"], + description: "Screen Saver", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1b1), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_FILE_BROWSER", "C_AL_FILES"], + description: "File Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1b4), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_IMAGE_BROWSER", "C_AL_IMAGES"], + description: "Image Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1b6), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_AUDIO_BROWSER", "C_AL_AUDIO", "C_AL_MUSIC"], + description: "Audio Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1b7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_MOVIE_BROWSER", "C_AL_MOVIES"], + description: "Movie Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1b8), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=148", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_INSTANT_MESSAGING", "C_AL_IM"], + description: "Instant Messaging", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1bc), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=149", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AL_OEM_FEATURES", "C_AL_TIPS", "C_AL_TUTORIAL"], + description: "OEM Features / Tips / Tutorial Browser", + context: "Consumer AL", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x1bd), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=149", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_NEW"], + description: "New", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x201), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_OPEN"], + description: "Open", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x202), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_CLOSE"], + description: "Close", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x203), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_EXIT"], + description: "Exit", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x204), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_SAVE"], + description: "Save", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x207), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_PRINT"], + description: "Print", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x208), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_PROPERTIES", "C_AC_PROPS"], + description: "Properties", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x209), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_UNDO"], + description: "Undo", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x21a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_COPY"], + description: "Copy", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x21b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_CUT"], + description: "Cut", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x21c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_PASTE"], + description: "Paste", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x21d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_FIND"], + description: "Find", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x21f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_SEARCH"], + description: "Search", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x221), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_GOTO"], + description: "Go To", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x222), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_HOME"], + description: "Home", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x223), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_BACK"], + description: "Back", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x224), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_FORWARD"], + description: "Forward", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x225), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_STOP"], + description: "Stop", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x226), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_REFRESH"], + description: "Refresh", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x227), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_BOOKMARKS", "C_AC_FAVORITES", "C_AC_FAVOURITES"], + description: "Bookmarks", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x22a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_ZOOM_IN"], + description: "Zoom In", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x22d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_ZOOM_OUT"], + description: "Zoom Out", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x22e), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_ZOOM"], + description: "Zoom", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x22f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=150", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_VIEW_TOGGLE"], + description: "View Toggle", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x232), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=151", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_SCROLL_UP"], + description: "Scroll Up", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x233), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=151", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_SCROLL_DOWN"], + description: "Scroll Down", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x234), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=151", + os: { + windows: null, + linux: true, + android: true, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_EDIT"], + description: "Edit", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x23d), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=151", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_CANCEL"], + description: "Cancel", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x25f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=152", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_INSERT", "C_AC_INS"], + description: "Insert Mode", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x269), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=152", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_DEL"], + description: "Delete", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x26a), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=152", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_REDO"], + description: "Redo / Repeat", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x279), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=152", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_REPLY"], + description: "Reply", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x289), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_FORWARD_MAIL"], + description: "Forward", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x28b), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_SEND"], + description: "Send", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x28c), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: true, + android: false, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_AC_DESKTOP_SHOW_ALL_WINDOWS"], + description: "Desktop Show All Windows", + context: "Consumer AC", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x29f), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=153", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_PREVIOUS", "C_KBIA_PREV"], + description: "Previous", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2c7), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_NEXT", "C_KBIA_NEXT"], + description: "Next", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2c8), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_PREVIOUS_GROUP", "C_KBIA_PREV_GRP"], + description: "Previous Group", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2c9), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_NEXT_GROUP", "C_KBIA_NEXT_GRP"], + description: "Next Group", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2ca), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_ACCEPT", "C_KBIA_ACCEPT"], + description: "Accept", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2cb), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, + { + names: ["C_KEYBOARD_INPUT_ASSIST_CANCEL", "C_KBIA_CANCEL"], + description: "Cancel", + context: "Consumer KBIA", + clarify: true, + usages: [ + { + application: consumerApplication, + item: usage(consumerPage, 0x2cc), + }, + ], + documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=157", + os: { + windows: null, + linux: true, + android: null, + macos: null, + ios: null, + }, + footnotes: {}, + }, +]; diff --git a/zmk/docs/src/data/operating-systems.js b/zmk/docs/src/data/operating-systems.js new file mode 100644 index 00000000..0631766d --- /dev/null +++ b/zmk/docs/src/data/operating-systems.js @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +export default [ + { + key: "windows", + className: "windows", + heading: "W", + title: "Windows", + }, + { + key: "linux", + className: "linux", + heading: "L", + title: "Linux", + }, + { + key: "android", + className: "android", + heading: "A", + title: "Android", + }, + { + key: "macos", + className: "macos", + heading: "m", + title: "macOS", + }, + { + key: "ios", + className: "ios", + heading: "i", + title: "iOS", + }, +]; diff --git a/zmk/docs/src/footnotes.js b/zmk/docs/src/footnotes.js new file mode 100644 index 00000000..c6fdbaa7 --- /dev/null +++ b/zmk/docs/src/footnotes.js @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import footnotes from "./data/footnotes"; + +export function getFootnote(id) { + const footnote = footnotes[id]; + if (typeof footnote != "undefined") { + return footnote; + } +} diff --git a/zmk/docs/src/groups.js b/zmk/docs/src/groups.js new file mode 100644 index 00000000..a5ea294f --- /dev/null +++ b/zmk/docs/src/groups.js @@ -0,0 +1,11 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import groups from "./data/groups.js"; + +export function getGroup(id) { + return groups[id] ?? null; +} diff --git a/zmk/docs/src/hid-usage.js b/zmk/docs/src/hid-usage.js new file mode 100644 index 00000000..d6423589 --- /dev/null +++ b/zmk/docs/src/hid-usage.js @@ -0,0 +1,9 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +export default function usage(page, id) { + return (page << 16) | id; +} diff --git a/zmk/docs/src/hid.js b/zmk/docs/src/hid.js new file mode 100644 index 00000000..583ce7a5 --- /dev/null +++ b/zmk/docs/src/hid.js @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2020 The ZMK Contributors + * + * SPDX-License-Identifier: CC-BY-NC-SA-4.0 + */ + +import codes from "./data/hid"; + +export const map = codes.reduce((map, item) => { + item.names.forEach((name) => (map[name] = item)); + return map; +}, {}); + +export function getCode(id) { + return map[id] ?? null; +} + +export function getCodes(ids) { + return ids.reduce((result, id) => [...result, map[id]], []); +} diff --git a/zmk/docs/src/pages/index.js b/zmk/docs/src/pages/index.js new file mode 100644 index 00000000..7019e579 --- /dev/null +++ b/zmk/docs/src/pages/index.js @@ -0,0 +1,98 @@ +import React from "react"; +import classnames from "classnames"; +import Layout from "@theme/Layout"; +import Link from "@docusaurus/Link"; +import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; +import useBaseUrl from "@docusaurus/useBaseUrl"; +import styles from "./styles.module.css"; +import PropTypes from "prop-types"; + +const features = [ + { + title: <>Powered by Zephyr™, + imageUrl: "img/undraw_zephyr.svg", + description: ( + <> + With a wide range of architecture support, ZMK is ready for many + existing keyboards. + + ), + }, + { + title: <>Permissive Licensing, + imageUrl: "img/undraw_open_source.svg", + description: ( + <>MIT licensed to remove any future limitations in innovation. + ), + }, + { + title: <>Wireless First, + imageUrl: "img/undraw_wireless.svg", + description: <>Designed for the future, including wireless support., + }, +]; + +function Feature({ imageUrl, title, description }) { + const imgUrl = useBaseUrl(imageUrl); + return ( +
+ {imgUrl && ( +
+ {title} +
+ )} +

{title}

+

{description}

+
+ ); +} + +Feature.propTypes = { + imageUrl: PropTypes.string.isRequired, + title: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, +}; + +function Home() { + const context = useDocusaurusContext(); + const { siteConfig = {} } = context; + return ( + +
+
+

{siteConfig.title}

+

{siteConfig.tagline}

+
+ + Get Started + +
+
+
+
+ {features && features.length > 0 && ( +
+
+
+ {features.map((props, idx) => ( + + ))} +
+
+
+ )} +
+
+ ); +} + +export default Home; diff --git a/zmk/docs/src/pages/styles.module.css b/zmk/docs/src/pages/styles.module.css new file mode 100644 index 00000000..9e3ab999 --- /dev/null +++ b/zmk/docs/src/pages/styles.module.css @@ -0,0 +1,51 @@ +/* stylelint-disable docusaurus/copyright-header */ + +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; + background: linear-gradient(150deg, #026fc5, #7929d2); + color: #fff; +} + +@media screen and (max-width: 966px) { + .heroBanner { + padding: 2rem; + } +} + +.getStarted { + color: #fff; + border-color: #fff; + border: solid 1px; +} + +.getStarted:hover { + background: #fff; + color: #000; + border-color: #fff; +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} + +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureImage { + height: 200px; + width: 200px; +} diff --git a/zmk/docs/static/img/favicon.ico b/zmk/docs/static/img/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..faec05fa7b2d2cead46fbc236908197aa5dce3ac GIT binary patch literal 15086 zcmeHOU2IfE6uw3u;6cToC<#Vu#E6Pm{wh#@%1?z#TUww{C^i)k3PmOUJosXG@aMsZ z0SzSTlY|5?nurfX;)|N>|8BQHP(v(OXafod$F7BJVaKOry}6*A;Z<e~Tat-!#DB$Poxh6=H~M;t&j0%9KlB)l zSS@0-gFl%3J!BXu{Uh(lmTM6Im6KQm{9R-i5&PfqshKl*$q-)sR4M}g9x}k6i@pBH z=6v8EUNuqY?;%6Hc|KF|gY@7ayE$-82?HmNvop}ULf$I)%gFG{n_C%p$u#(1qOrc< zxwn4eHroZ7ivhCY1Uts<6a~_EQx_~ z0(XHt{UN8=mZJ-xzbW6Inq3jSU)^nCTMpVXxKLhO^dkF)aklA)MB0NY0% zD08Q1=kFy0=0RmGmr}IlOX!>Qj{8K(J4NE(F`9w56{at^__RGfQ0|&%-s*LS;$}-G z{}PoUgMSIiFpPhR$>7Mpgk&)Ir?S0LoW@?k0oVh%LO%J$rVu>!;7<0b~2syg2anEbYX>&wLJg$f(({=z+#xF@@J@Wa^zPSW^>4xBjr_71-bOy6>(kWSrTC%0|Mi$l110wZ{E@UjJ* zOC_5cbLJ3UJ6<0jJUlq`hktU^0Y1DO4d)!Q`2AE`hC^p-wdWqM@8Fj?aWKc1&;#rd zbMDx*x2N$PIQW@=AV#?DFU;|69K38>Retn^Gh-(Xfz5X@z~o`rgWvjh z+g}7aM%{Ac!0izn^3emH#oW{0!j{{My&jG4#=*reRN{qGZf~6nbNmtFkTL!Ua2Phe z!NIgg;TP8R32QZA#BOswL=J^Kio?w9jXjRO*W~+c?75A7xBWbz*za*pfn$j>4)dIX z|JKaj;6Je%evb}R^Z1V6i{W=-{5&EthyN~Y<~l;>^bL%FbB9T&Fnq@;&FQI z+4G5OAEDMq^g1|OAD9c#s3vv$D~^3|f8ljF&V5`-hD8@F_16Vm7d9IUZg>DWl4Bpx zC!Q1SN+LGQPVv0xyN)n5YJMy0KN2wB{8Dr{Z!LC@#WhkZRzeg7XmV2Y*y literal 0 HcmV?d00001 diff --git a/zmk/docs/static/img/undraw_open_source.svg b/zmk/docs/static/img/undraw_open_source.svg new file mode 100644 index 00000000..80887c88 --- /dev/null +++ b/zmk/docs/static/img/undraw_open_source.svg @@ -0,0 +1 @@ +open source \ No newline at end of file diff --git a/zmk/docs/static/img/undraw_wireless.svg b/zmk/docs/static/img/undraw_wireless.svg new file mode 100644 index 00000000..5a7a9282 --- /dev/null +++ b/zmk/docs/static/img/undraw_wireless.svg @@ -0,0 +1 @@ +moving forward \ No newline at end of file diff --git a/zmk/docs/static/img/undraw_zephyr.svg b/zmk/docs/static/img/undraw_zephyr.svg new file mode 100644 index 00000000..beb01d7b --- /dev/null +++ b/zmk/docs/static/img/undraw_zephyr.svg @@ -0,0 +1 @@ +programmer \ No newline at end of file diff --git a/zmk/docs/static/img/zmk_logo.svg b/zmk/docs/static/img/zmk_logo.svg new file mode 100644 index 00000000..31977a60 --- /dev/null +++ b/zmk/docs/static/img/zmk_logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/zmk/docs/static/setup.ps1 b/zmk/docs/static/setup.ps1 new file mode 100644 index 00000000..8a51efab --- /dev/null +++ b/zmk/docs/static/setup.ps1 @@ -0,0 +1,206 @@ +# Copyright (c) 2020 The ZMK Contributors +# +# SPDX-License-Identifier: MIT + +$ErrorActionPreference = "Stop" + +function Get-Choice-From-Options { + param( + [String[]] $Options, + [String] $Prompt + ) + + while ($true) { + for ($i = 0; $i -lt $Options.length; $i++) { + Write-Host "$($i + 1)) $($Options[$i])" + } + + Write-Host "$($Options.length + 1)) Quit" + $selection = Read-Host $Prompt + + if ($selection -eq $Options.length + 1) { + Write-Host "Goodbye!" + exit 1 + } + elseif ($selection -le $Options.length) { + $choice = $($selection - 1) + break + } + else { + Write-Host "Invalid Option. Try another one." + } + } + + return $choice +} + +function Test-Git-Config { + param( + [String] $Option, + [String] $ErrMsg + ) + + git config $Option | Out-Null + + if ($lastExitCode -ne 0) { + Write-Host $ErrMsg + exit 1 + } +} + +try { + git | Out-Null +} +catch [System.Management.Automation.CommandNotFoundException] { + Write-Host "Git is not installed, and is required for this script!" + exit 1 +} + +Test-Git-Config -Option "user.name" -ErrMsg "Git username not set!`nRun: git config --global user.name 'My Name'" +Test-Git-Config -Option "user.email" -ErrMsg "Git email not set!`nRun: git config --global user.email 'example@myemail.com'" + +$permission = (Get-Acl $pwd).Access | +?{$_.IdentityReference -match $env:UserName ` + -and $_.FileSystemRights -match "FullControl" ` + -or $_.FileSystemRights -match "Write" } | + + Select IdentityReference,FileSystemRights + +If (-Not $permission){ + Write-Host "Sorry, you do not have write permissions in this directory." + Write-Host "Please try running this script again from a directory that you do have write permissions for." + exit 1 +} + +$repo_path = "https://github.com/zmkfirmware/zmk-config-split-template.git" + +$title = "ZMK Config Setup:" +$prompt = "Pick an MCU board" +$options = "nice!nano", "QMK Proton-C", "BlueMicro840 (v1)", "makerdiary nRF52840 M.2" +$boards = "nice_nano", "proton_c", "bluemicro840_v1", "nrf52840_m2" + +Write-Host "$title" +Write-Host "" +Write-Host "MCU Board Selection:" + +$choice = Get-Choice-From-Options -Options $options -Prompt $prompt +$board = $($boards[$choice]) + +Write-Host "" +Write-Host "Keyboard Shield Selection:" +$prompt = "Pick a keyboard" + +# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. +$options = "Kyria", "Lily58", "Corne", "Splitreus62", "Sofle", "Iris", "Reviung41", "RoMac", "RoMac+", "makerdiary M60", "Microdox", "TG4X", "QAZ", "NIBBLE" +$names = "kyria", "lily58", "corne", "splitreus62", "sofle", "iris", "reviung41", "romac", "romac_plus", "m60", "microdox", "tg4x", "qaz", "nibble" +$splits = "y", "y", "y", "y", "y", "y", "n", "n", "n", "n", "y", "n", "n", "n" + +$choice = Get-Choice-From-Options -Options $options -Prompt $prompt +$shield_title = $($options[$choice]) +$shield = $($names[$choice]) +$split = $($splits[$choice]) + +if ($split -eq "n") { + $repo_path = "https://github.com/zmkfirmware/zmk-config-template.git" +} + +$copy_keymap = Read-Host "Copy in the stock keymap for customisation? [Yn]" + +if ($copy_keymap -eq "" -or $copy_keymap -eq "Y" -or $copy_keymap -eq "y") { + $copy_keymap = "yes" +} + +$github_user = Read-Host "GitHub Username (leave empty to skip GitHub repo creation)" + +if ($github_user -ne "") { + $repo_name = Read-Host "GitHub Repo Name [zmk-config]" + + if ($repo_name -eq "") { + $repo_name = "zmk-config" + } + + $github_repo = Read-Host "GitHub Repo [https://github.com/$github_user/$repo_name.git]" + + if ($github_repo -eq "") { + $github_repo = "https://github.com/$github_user/$repo_name.git" + } +} +else { + $repo_name = "zmk-config" + $github_repo = "" +} + +Write-Host "" +Write-Host "Preparing a user config for:" +Write-Host "* MCU Board: ${board}" +Write-Host "* Shield: ${shield}" + +if ($copy_keymap -eq "yes") { + Write-Host "* Copy Keymap?: Yes" +} +else { + Write-Host "* Copy Keymap?: No" +} + +if ($github_repo -ne "") { + Write-Host "* GitHub Repo to Push (please create this in GH first!): $github_repo" +} + +Write-Host "" +$do_it = Read-Host "Continue? [Yn]" + +if ($do_it -ne "" -and $do_it -ne "Y" -and $do_it -ne "y") { + Write-Host "Aborting..." + exit 1 +} + +git clone --single-branch "$repo_path" "$repo_name" +Set-Location "$repo_name" + +Push-Location config + +Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" -OutFile "${shield}.conf" + +if ($copy_keymap -eq "yes") { + Invoke-RestMethod -Uri "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" -OutFile "${shield}.keymap" +} + +Pop-Location + +$build_file = (Get-Content .github/workflows/build.yml).replace("BOARD_NAME", $board) +$build_file = $build_file.replace("SHIELD_NAME", $shield) +$build_file = $build_file.replace("KEYBOARD_TITLE", $shield_title) + +if ($board -eq "proton_c") { + $build_file = $build_file.replace("uf2", "hex") +} + +Set-Content -Path .github/workflows/build.yml -Value $build_file + +Remove-Item -Recurse -Force .git +git init . +git add . +git commit -m "Initial User Config." + +if ($github_repo -ne "") { + git remote add origin "$github_repo" + + git push --set-upstream origin $(git symbolic-ref --short HEAD) + + # If push failed, assume that the origin was incorrect and give instructions on fixing. + if ($lastExitCode -ne 0) { + Write-Host "Remote repository $github_repo not found..." + Write-Host "Check GitHub URL, and try adding again." + Write-Host "Run the following: " + Write-Host " git remote rm origin" + Write-Host " git remote add origin FIXED_URL" + Write-Host " git push --set-upstream origin $(git symbolic-ref --short HEAD)" + Write-Host "Once pushed, your firmware should be availalbe from GitHub Actions at: $actions" + exit 1 + } + + if ($github_repo -imatch "https") { + $actions = "$($github_repo.substring(0, $github_repo.length - 4))/actions" + Write-Host "Your firmware should be availalbe from GitHub Actions shortly: $actions" + } +} diff --git a/zmk/docs/static/setup.sh b/zmk/docs/static/setup.sh new file mode 100644 index 00000000..cdd6bc47 --- /dev/null +++ b/zmk/docs/static/setup.sh @@ -0,0 +1,222 @@ +#!/bin/bash + +# Copyright (c) 2020 The ZMK Contributors +# +# SPDX-License-Identifier: MIT + +set -e + +check_exists() { + command_to_run=$1 + error_message=$2 + local __resultvar=$3 + + if ! eval "$command_to_run" &> /dev/null; then + if [[ "$__resultvar" != "" ]]; then + eval $__resultvar="'false'" + else + printf "%s\n" "$error_message" + exit 1 + fi + else + if [[ "$__resultvar" != "" ]]; then + eval $__resultvar="'true'" + fi + fi +} + +check_exists "command -v git" "git is not installed, and is required for this script!" +check_exists "command -v curl" "curl is not installed, and is required for this script!" curl_exists +check_exists "command -v wget" "wget is not installed, and is required for this script!" wget_exists + +check_exists "git config user.name" "Git username not set!\nRun: git config --global user.name 'My Name'" +check_exists "git config user.email" "Git email not set!\nRun: git config --global user.email 'example@myemail.com'" + +# Check to see if the user has write permissions in this directory to prevent a cryptic error later on +if [ ! -w `pwd` ]; then + echo 'Sorry, you do not have write permissions in this directory.'; + echo 'Please try running this script again from a directory that you do have write permissions for.'; + exit 1 +fi + +# Parse all commandline options +while [[ "$#" -gt 0 ]]; do + case $1 in + -w|--wget) force_wget="true"; break;; + *) echo "Unknown parameter: $1"; exit 1;; + esac + shift +done + +if [[ $curl_exists == "true" && $wget_exists == "true" ]]; then + if [[ $force_wget == "true" ]]; then + download_command="wget " + else + download_command="curl -O " + fi +elif [[ $curl_exists == "true" ]]; then + download_command="curl -O " +elif [[ $wget_exists == "true" ]]; then + download_command="wget " +else + echo 'Neither curl nor wget are installed. One of the two is required for this script!' + exit 1 +fi + +repo_path="https://github.com/zmkfirmware/zmk-config-split-template.git" +title="ZMK Config Setup:" + +prompt="Pick an MCU board:" +options=("nice!nano" "QMK Proton-C" "BlueMicro840 (v1)" "makerdiary nRF52840 M.2") + +echo "$title" +echo "" +echo "MCU Board Selection:" +PS3="$prompt " +select opt in "${options[@]}" "Quit"; do + + case "$REPLY" in + + 1 ) board="nice_nano"; break;; + 2 ) board="proton_c"; break;; + 3 ) board="bluemicro840_v1"; break;; + 3 ) board="nrf52840_m2"; break;; + + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) echo "Invalid option. Try another one."; continue;; + + esac +done + +echo "" +echo "Keyboard Shield Selection:" + +prompt="Pick an keyboard:" +options=("Kyria" "Lily58" "Corne" "Splitreus62" "Sofle" "Iris" "Reviung41" "RoMac" "RoMac+" "makerdiary M60" "Microdox" "TG4X" "QAZ") + +PS3="$prompt " +# TODO: Add support for "Other" and linking to docs on adding custom shields in user config repos. +# select opt in "${options[@]}" "Other" "Quit"; do +select opt in "${options[@]}" "Quit"; do + + case "$REPLY" in + + 1 ) shield_title="Kyria" shield="kyria"; split="y"; break;; + 2 ) shield_title="Lily58" shield="lily58"; split="y"; break;; + 3 ) shield_title="Corne" shield="corne"; split="y"; break;; + 4 ) shield_title="Splitreus62" shield="splitreus62"; split="y"; break;; + 5 ) shield_title="Sofle" shield="sofle"; split="y"; break;; + 6 ) shield_title="Iris" shield="iris"; split="y"; break;; + 7 ) shield_title="Reviung41" shield="reviung41"; split="n"; break;; + 8 ) shield_title="RoMac" shield="romac"; split="n"; break;; + 9 ) shield_title="RoMac+" shield="romac_plus"; split="n"; break;; + 10 ) shield_title="M60" shield="m60"; split="n"; break;; + 11 ) shield_title="Microdox" shield="microdox"; split="y"; break;; + 12 ) shield_title="TG4X" shield="tg4x"; split="n"; break;; + 13 ) shield_title="QAZ" shield="qaz"; split="n"; break;; + 14 ) shield_title="NIBBLE" shield="nibble"; split="n"; break;; + + # Add link to docs on adding your own custom shield in your ZMK config! + # $(( ${#options[@]}+1 )) ) echo "Other!"; break;; + $(( ${#options[@]}+1 )) ) echo "Goodbye!"; exit 1;; + *) echo "Invalid option. Try another one.";continue;; + + esac +done + +if [ "$split" == "n" ]; then + repo_path="https://github.com/zmkfirmware/zmk-config-template.git" +fi + +read -r -e -p "Copy in the stock keymap for customization? [Yn]: " copy_keymap + +if [ -z "$copy_keymap" ] || [ "$copy_keymap" == "Y" ] || [ "$copy_keymap" == "y" ]; then copy_keymap="yes"; fi + +read -r -e -p "GitHub Username (leave empty to skip GitHub repo creation): " github_user +if [ -n "$github_user" ]; then + read -r -p "GitHub Repo Name [zmk-config]: " repo_name + if [ -z "$repo_name" ]; then repo_name="zmk-config"; fi + + read -r -p "GitHub Repo [https://github.com/${github_user}/${repo_name}.git]: " github_repo + + if [ -z "$github_repo" ]; then github_repo="https://github.com/${github_user}/${repo_name}.git"; fi +else + repo_name="zmk-config" +fi + +echo "" +echo "Preparing a user config for:" +echo "* MCU Board: ${board}" +echo "* Shield: ${shield}" + +if [ "$copy_keymap" == "yes" ]; then + echo "* Copy Keymap?: ✓" +else + echo "* Copy Keymap?: ❌" +fi + +if [ -n "$github_repo" ]; then + echo "* GitHub Repo To Push (please create this in GH first!): ${github_repo}" +fi + +echo "" +read -r -p "Continue? [Yn]: " do_it + +if [ -n "$do_it" ] && [ "$do_it" != "y" ] && [ "$do_it" != "Y" ]; then + echo "Aborting..." + exit 1 +fi + +git clone --single-branch $repo_path ${repo_name} +cd ${repo_name} + +pushd config + +$download_command "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.conf" + +if [ "$copy_keymap" == "yes" ]; then + $download_command "https://raw.githubusercontent.com/zmkfirmware/zmk/main/app/boards/shields/${shield}/${shield}.keymap" +fi + +popd + +sed -i'.orig' \ + -e "s/BOARD_NAME/$board/" \ + -e "s/SHIELD_NAME/$shield/" \ + -e "s/KEYBOARD_TITLE/$shield_title/" \ + .github/workflows/build.yml + +if [ "$board" == "proton_c" ]; then + # Proton-C board still fa + sed -i'.orig' -e "s/uf2/hex/g" .github/workflows/build.yml +fi + +rm .github/workflows/*.yml.orig + +rm -rf .git +git init . +git add . +git commit -m "Initial User Config." + +if [ -n "$github_repo" ]; then + git remote add origin "$github_repo" + git push --set-upstream origin "$(git symbolic-ref --short HEAD)" + push_return_code=$? + + # If push failed, assume that the origin was incorrect and give instructions on fixing. + if [ ${push_return_code} -ne 0 ]; then + echo "Remote repository $github_repo not found..." + echo "Check GitHub URL, and try adding again." + echo "Run the following: " + echo " git remote rm origin" + echo " git remote add origin FIXED_URL" + echo " git push --set-upstream origin $(git symbolic-ref --short HEAD)" + echo "Once pushed, your firmware should be availalbe from GitHub Actions at: ${github_repo%.git}/actions" + exit 1 + fi + + # TODO: Support determing the actions URL when non-https:// repo URL is used. + if [ "${github_repo}" != "${github_repo#https://}" ]; then + echo "Your firmware should be available from GitHub Actions shortly: ${github_repo%.git}/actions" + fi +fi

9^W zdcOPKS!MUj-W!^X9YI0c%=6tz3Ms6RJRq~ljsdniEhPpmt-Pkm!s34=Aa+<42+O zy&4bun@VJbFYNtso4JS{F!Ja*))#@z*!@2@6UN~!;(7K2aF0nVv`>2~J<98T-pUje z0}wAU@wu_&*{+ps;jRlhP7<1D=o0>KCpskED<5i0@a9=b3^%~8gE6tftgUD9N@fh9sM5grqHjvP`BJS#>z*IACRzsNidUKGnouGH~$z zN$uB1fWTJ{;>I`u{NRx^NFlxFAnQ?GgCS-dfOyh@!uFpa+=dJ*wE`-Jw+!@1gn6ba z4*E^-o>(}o{yPcyK7mNcKMBR5g&uya({kJUB}9kzNd^xNIzD*#TNJaGq2&J>FG?IS z=wVj#_gLNmP_#iEm~kHmoeEkxt{lZbxLWhY9Oqw4@m7=nn}|M&2F@GzC^Jp(aHAL!v1Do8w3F){FP*h7YE2GlS# zN{sh^E$3U&Vu^dEs3?%D{*w7{;5royjb8}$A3xsCf=6})Zj@ttA4A8|Sd+Da^D7Y&4>L;m zCJoGwQC|Y{pDbMmbf}1qbKV591mXtF8~-Cqwm_DC_L7DFJHs$Da4d@?tRvtL=HR_= zb3h}{fj>s*FE&rY<_%vvNH6}Qc`+V*(G^Yp0Qh5V@E$8KuzgKHa_5OoepMo>iD#y8 z`Tm`XD|9O4KUKIufD{hi!@>cYzyjVnmK2`aq=xwkcu8RYBRK`~l61vtU=QP9gRO+P zH$g-r2uYRF3mQGnYAaM}y(SHzx3Y!QtmGlsB!6ehU5xGk`UcpW9zI_2)fJ`((6; z7q2#mi~b%us!wuY`T`|8bX4*Tm@~L7tv)naPyPlcoEQ?4kS|YIh|~jkTi#V9SHFEwJ(kOGe=fl5Q<_b(tlr>01D#{FM2M9=G;4Ta_R-k^V{M5X+t51sM7 z|9i%(<=~8y;e+^pxBV4ELKbX0bFSGRjYd&4_QdAwtZMh$yvgp;*sSc)-8;tH4M#z* zi^|r?rC<|w3;D0{kAM278XwdiEp4iAcP2P(chjZXM22$Pa(#^ATfN5Dq~cn0>{FI$ zdXTGfS&pA!+!?Wh7W4TC(7{ws`L=rXrsUe+t+hmnMnRk~Z!eK%D7N`w}F#sbd$2!a*U$XVv{z0 zucy28#rMS014I#`BB(k}7#FbbMcAN32KxSec6GNqaf`J|{E2o`#UE5wMlE^_&sl_m z;c#pkMH%sHcHy6{|I>g`)HG@k-$oqZ%(cYf4J-xJ-m^QLYAyYhX;Ql2Pr(r(3YQPP zMH3sRC*deyiDGKElbaizIjW%1RiU9z?@!@e%qF0H^USvK!oSDkkSm_mMA06tg1dUw z^Q_ z_@wW3p)gu-^-Ry*C`37R;(=&4QcqW!T<$T4IpgwYyh4%;;uiOU)m+YRDv(l-FYP$I}1r%^6 zHF>}62|G%iBB8aQAHI;D94a85nsU*1H>$7`IXz9>jwB=J%PuIlR_+(LMwO326N^L3 z{Dq1JhQ`bH9_`N=qw{;y2OuOv;EGY{-D9`;4`o_oySp2^tkEPWZW$e0|)mm^+_+lQ|U!9B=8PDv= zW!PtOV1*xixpBnE?eKDWLoxtyHv&G~;d>T(!#IWT=j8$!XjSkk4Ln{+^@@%m^XsDF zNCm⩔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 NSxH5SLNS9E{|82zP0RoQ literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/hold-tap/case1_2.png b/zmk/docs/docs/assets/hold-tap/case1_2.png new file mode 100644 index 0000000000000000000000000000000000000000..818ac83752dd0c47c590b015ca18923797981c42 GIT binary patch literal 10323 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 JMA|6uKLDAAvPJ*^ literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/hold-tap/case_hold_preferred.png b/zmk/docs/docs/assets/hold-tap/case_hold_preferred.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7fd43bb58681629387932f0053995d7d5d0c33 GIT binary patch literal 6380 zcmb_gcT^MGyB$SALEs`%q**8dsVX%Bp<|HVLXU#L1`wpmrGtQ!fP^Me zBE5r@P(&~RLzCX}hWpxIzx(cQt(P_Hn^~Ee^__F}{=U7>ywKOxq^ISe1pt5^eqYTH z0M1H-*EJWY!PxZ{-v*w}d8@#UFMz+03y+@z0DBHxP1!ggolFQ0F^2ddS1CQ<0&?extMm(K437%J7?J z=WnC}i(yP>sLrUUgui+fd|x2p?QvvkL|wFYU(ehAL)eeUOCdA~v-^E=j(rs(+BVBf zK>2gMm!q4zSrX7^h|+^a2Y2gjwj4V^u~gHzFs$|vqJh6~!4Iw#O!Uj~2J(mR2^h9( zigR+et}MHxds8wqv!z3b%U*1?vY}qw7Agw@11}$!tDH<&7W=Fxf}Y66D`c^u2I!*3ErOc zmoS1McQifKRqq*_Ae`EZDJ2oV>M*$tqP8 zjW|dl>F}WDlM0fOvvRH)t&NVrcYRjreQz>0pylRgQ<&G)ZRGIzHDwwsNqNgzuY6R! z<6pis@G(xmRjid3YNM(e*@u)}h`Ub&978kWd8T;b2TP4;nX9IlE5lW2o?zltFlTX1 zjfPx7ypO;3p4`$OC_CLxh(LRETq}=A$!Kv2c2q__6HJd0W=kV*?{`e~yHc|C_^j`Z z?MI>-5tyxv=wz3@56y(!VcUwXg$+U1aRKs7y-7PltjhuGszkYQFv-0u{B&+zERZq7 zT+b#fUa@bca5xZeVr?xJ&1=@Ua6qbg%`6poMDUW0n8dC=qfV|tRVoKFIuuv`tW=3m zO_CKY6nn+E7V8E6PD+@)aH)p^~Iu1B17FE-sy$qqo@? zt(tI)S-Yp797F4~?UE$VgJ$6B8;UXM@AB|>+8O6@+e{ysCv~w0NAq=p{~S~YrYgE; z+S(mVuX{6SzM8S2#LUcY=G)pHIJK=;&@wO#c24sKEy5`1n3#V5&R`-j$dA0QFMhHL zfo_o)wqwX8FDv|=)Vxw-9*8+D9F~*vk|_C5NB8=%V|;B`POqhDNkfBLkr0W)cjcUk zapH0m;zT`)t>3rv&{anbUDz>?3#Mq6Qry%eTWK>sr$5vMX6CToZXORZ-t|V6V0SWD zZ~>%rF)L`nOyhy`e5hVA>MmYP6P=o?7)tH5+f-UP#f|$>GV8J9+s~G1s-u&4N~vuk z6FNm<3)8AdC8_n zX?-l|L($h7^CtXZBg;WBSm6C=^s1r0{_{+;qX+G~b$L(C!LpqEKx+0lXvDUIOBiyH z(KT5IPgC5>q3!$OGX3=`M|w)}b&c^rA&*C`N{5ch#a*~=4q^3loNIMn^Rd|U)EAAf^#u8??kmyL)5m3{ma(x; zs`}6Fi^7MHJE0>VS8Dia7#!i4Aq~C8M`rM$?-%c~%odQIx_PE}@2bW@h}?>}2f_%2 z633I{we8QsdakF~sP!q=S#1+A=a<^j_c)i%4fx_h&^pTV&d1{`&Bo?|6)F*}#+Hbj z+qF8Qdt3KB_v&=6HDw<~7~wo;{8@&p^ytdRjM3}&>A57{cP=n7De%LwNT|)MIk$N~ z=`NnHsC~ub66YN)%qjQ8tQBV;|7I;tIl_7d^U-TL`vqt%pHWHdWR6B7UdhgO?{p=2L@>?IR72HIOO)W zG_sqyFojv?HpBv-t`zL+Tu~PwgcL8g$`3+hEcILGPHE_llxHIUEPd-LwN%p?6C3Aw zG@+{LSJ?2U+WfphX@jkiLQYz*N+-HFs8q+}*u!-H42kj7-nV)z`&mFs4qQYaOsw|=1p4*{*A?3G9x=!0V zcfZ^_{@LRwa4l2iVbEKq(v~aZkr(LccTJB3LPYhh+v-X{ntH}h#6m?Gq4^JDd+XCE z?Tl=^Jw_kv1`QYdQvrB<2Mhq) zB@oUgzUbOrgG~+fA5Ku9%&%qb6s;)lS!61;f%O;iw*1)oz=Fp|J2}H{!E00)vilsI z3r92dI^51PEB||Tj_>l8f&0liJ$&d5*_9uj&@oFeDUlgrgLKJd^s%Dyn@%Px-#Lis z`YJ>pPd@anv+5P|T$2%K=yk!mY<+>_>?X10Q%jk0E>CXmQ7xVGKD%BcCM?a8g!t}P zKboUyoKU_k+OP&!SMP9|f~;TzyIr{Da1Y>-8r1=T?x&49%BrfFq~tVK07OAoqlZqHG{5=UKz$H=bsSPQAOOijzMiZZz)g8MVRxI{kg z!w^(ew_Zq?{t)(&&+$H0FZ@0`9~>H5L;A2DAP=4S48;vW?#Z|e)1XE=c9BM^sw=a7 zvTqNI_=-H&PHg(mQ}F+tTR>1yO{lfw3)y2JOZup+6LIw3wB++iP-RlPtx0E6ewLuh z3GNWv7l_?Rh=rx3JWc-T7afmkLS}{496qxLm2a}a9?R#v+!p+}!ptJHbg))8k&g`9 zdO=I8C!@H!5wLYKCSzjrG%t2o#`gz;^@~Fl$*M)D)NFeVI^Gi+*d<&>Y=kwJ5e{p# zF!{QvgRmbIgN7p& z=Kp%eVi#jtdV=D>NE$W<^A{H5R3Kgq#bv9-hS3EpYxzCSzpxtl@#6z6IX-uGpW6g1 zI@5E@8)n~_za^VhvKb?Mu)K9xO=^`Hd5bQg950nyHrkOtR$o1+@AMvl-GDRBP*g$F zRtp6eJ`=T%UmoPuGGMw5Dn)UjhzZ!|KwShEbBXZFX#rvKdyNDng*jXX>?1Eo6P7Tm zO-}dz$#-^;9nwI-y>bN}f~Ao_-%vHYYVTC$v0cCgR@K1+x<%;f(46lwzIeRR`yPKRD$Mjg?_J1eXl@sv=|@Ve-# z7FXh*gy34@FQaJRqCzFM*iHVxE0-^qDcAD366aon;$9G>f%lcAJIm%BA$KMq!T!;v zq28owZS8Ra0L}H+&W%Caj4?NpGt(|}ERNc9Ci<^d2Ju(TpG{@vW-4oVFMqsMijstC zDb1BV27phJg5c)jljO^K`8+m|UKKL|hfxeL@z5T`)~BPj;2TT;vNav(=}c_T_sp`C z44rIXfO#sNO&*{=d*1u31jL9nEo|e(GFz6D&m}A@yFvfDUTS+Wev3=!GG`(s|x8D%trmuDiq-2fomS^sb2*EoiO%VAbz8UhhY~15R{&d6`pke?!WRaX_GUid-M;7QyXD5062p%(8>8mh!Yn zlVKrUM0Vhb(KHV_B9go7KBt4vmA#MPoxX}Q0I;Nd8uR~IB<1SC%*!bh##&cG`863R zEpYwQ2YQ#Q?cm-r3EW{3iI78XIRjth|`qFHC7ujMD57wEw1{ z#p9nm_!L_^dx{ z_kD4(7DO-8xZI}kW&F3=bln15J3A9&48=6O*Fs z>=v+6TEA@s$ZJG9^?hrP-JS_v6H-*1AqpxL7@L|F=jOI~M&F(j)_U+j%4I~bnZPqL zHdb6+ZM?s~uc3MIf?_>hKuk>cu4A9Eg+=P1LAdTkdU_L6(>H^+f#x56^(-tbd3c`S z9-?5zWiGDw+biRo+`JE;#Q&Sz%4$@)=F#^%70uRiN%^hYw+-}Q$3FF$2^krs<4BZs zQBjda<>OBJ?pwmb+hdlVq_!8##bsrtK|wg4!0$|+YBb?u?edpIepV>gzqhQ_4c=W% z8YYc=dCkkYHjj1a<)@aQ@czqS8!6=S_w}uqmec$-IjF zp&~3(JwqUoTFHv-C zTP-x#1R)U3#l^)+aGw_wGxVH^S2FYf6q(_IPH)gZfWlVeK9&FTr<-+C2)OsxiKM0< zN|*DN3|OD*$Z}sz+3ZRZ#(K^+b!3@0h1Bs0L7^7*_VyUQcHX}PbJ7dsjgoj6&Zn|vt^t6?zHLiN%%zD&dj;64*wCOd}QH6`EYtrl2 z*+in#=-61-qL(v1p1X32oO;{tS+1+UJq_S#%k!ty6;9a34;aNjM?cbbT0 zb6BIa`{c+Te4Y+u4~WlLRlj1%^XC`fhM}R2Z^V&h4Gr?(yqr&t_C?EN6cnsUB+_K9 zXBL=K%6ECB|bZ&cMn_1kNGtW|m;@Pw-8qX5ji7 z;Bc~CTvD=qyoPGtK%3!qitML9KJDu6Hd0ppeOHAloK1ppkVBVehdK0cCyB4|aJ3%i zLmHy*1|cytG)yIsuQD-Zx3#qipf%Oi;g~X;#^tDLU{0Y&wfdQYbeQexbR9HsGgmiD zvDCi%jnIu7%B|6i2raD`@a^wUWK%brr(U{Yp<1!Q{PgKl ziyF7LHJ-C&jlsLcA3o?uMMX{4xTmS8sQBQy{hh|%n^#(RPG8(zq)-DWyu6w#2r8e5 zh<24j@6dbmDzG^7?eOuWfoxT%*Z1e(awvd+xU@u^*TA0x%E49PA3?xaxVcMTFhiDu zXAd)ZP)ASUh7Jz-92^{%bg2PCY~b@11Ggh3Utg@>>U0sI-e0Ev2&|qYf=6=qq9KTc zOu@oO$cNKC7no$4y?|dQrraCm(WM zliA9_;tL1}s4eAGdI<7C6y(EitgQL_zkaxGFOLST*8PxtGN-h?O0dKj8yn|>xSN-n z5>S+5LXekLf2IP<)vHA@F|@}=KVS$Il?aVEjyxfwd>>0{;P zr+fwrO9%!-nwFRt7#MKKc%(b@q+}~cQv13JfZv2Pc>>iuoA&c#Vq+J5pi)6wM2}wJ z`uZvKv3O0!3u4wdV|8_Pu)%@fDhGtJv$MOpx`tv{gkQ#=-NRxqmvz#lOE(-6PXuIT z%~rnWOnS zX^Dx6kA1E*&w16QTG3qqj^d`srXWB3)@Iy6e;*P^}qx?V1kb3FFLp<^AUVPckT@RWuRJW3jQ)sC16!>%LnLZp-w=x z;OB3jQv-l1yQyL67#+x|#>mOZ#XNsLu(z=w<@eJphxZJi9q+CO`lpQQhb?DC%|3hr mooP7mxu(GV@9|$iohi1|Kd)x?!W{gf55U!R)yh;JM*IgwMIW93 literal 0 HcmV?d00001 diff --git a/zmk/docs/docs/assets/hold-tap/comparison.png b/zmk/docs/docs/assets/hold-tap/comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..419b2040015ecf851e6605950e9e1a48472b8094 GIT binary patch literal 158912 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