Author SHA1 Message Date
Róbert Kiss 3659b76373 fix: allowed file extension for the firmware file upload 2019-08-23 21:15:25 +02:00
Róbert Kiss fae83a4148 chore: upgrade @types/decompress => 4.2.3 (#1023) 2019-08-23 20:30:51 +02:00
Róbert Kiss ac76674469 chore: add convert-user-config-to-bin npm script (#1022)
usage of the script
`$ npm run convert-user-config-to-bin -- <path of the bin file>`
2019-08-23 19:33:14 +02:00
Róbert Kiss 239c989cbe feat: Make the UHK of the web build split instead of merged (#1021) 2019-08-21 21:15:32 +02:00
Róbert Kiss 0914a1496b fix: confirmation popover titles (#1019) 2019-08-20 16:02:29 +02:00
Róbert Kiss 79f467603a feat: scroll to the end of the firmware log when success of faild panel visible (#1018) 2019-08-20 15:33:28 +02:00
Róbert Kiss c4269d4cf1 chore: use preserveWhitespaces = true in electron renderer (#1017)
The `npm run server:electron` build result much more simmilar to the production build
2019-08-20 15:19:00 +02:00
Róbert Kiss ee28065046 chore: upgrade angular => 8.2.2 (#996)
* chore: upgrade angular => 8.2.2

Summary:
- upgrade angular => 8.2.2
- setup the { static: false/true } for the ViewChild
- use alignment-baseline="middle" in svg text to align correct the texts

* fix: keymap popover crash
2019-08-20 12:54:23 +02:00
László Monda a64a44fe41 Update NPM_UPDATES.md 2019-08-18 22:52:09 +02:00
Róbert Kiss 4147243565 chore: upgrade electron => 5.0.9 (#1014)
Summary:
- Chromium: 73.0.3683.119
- Node.js: 12.0.0
- V8 engine: 7.3.492.27
2019-08-18 13:27:20 +02:00
Róbert Kiss 905007a597 chore: upgrade node-hid => 0.7.9 (#1011) 2019-08-14 17:10:39 +02:00
László Monda c3fec647b6 Update ISSUE_TEMPLATE 2019-08-14 17:06:53 +02:00
László Monda 5f5aff71a5 Create NPM_UPDATES.md 2019-08-14 17:04:19 +02:00
Róbert Kiss f6bef928fe chore(usb): add kboot-firmware-upgrade script (#1006) 2019-08-02 02:51:07 +02:00
Róbert Kiss 5ab5ad5f0c feat: ESC cancel the keymap description editing (#1007) 2019-07-31 10:03:29 +02:00
Róbert Kiss 4d2d6d40fb chore(kboot): add more logging (#1004) 2019-07-30 22:23:37 +02:00
Róbert Kiss db2e14a852 chore: upgrade ts-node => 8.3.0 (#1003) 2019-07-29 20:56:01 +02:00
Róbert Kiss 757a201c47 chore: upgrade lerna => 3.16.4 (#998) 2019-07-28 23:30:35 +02:00
Róbert Kiss c2c997c9b0 feat: decrease the size between the keyboard layout and description in split mode (#990)
* feat: decrease the size between the keyboard layout and description if split

* fix: increase the distance between the keyboard and keyboard desc.

* fix: increase the description distance in split mode
2019-07-28 20:43:12 +02:00
Róbert Kiss 0015e6deb3 chore: upgrade electron => 4.2.8 (#995)
Summary:
- 10.11.0 the bundled Node.js version in electron
- Chromium version number 69.0.3497.128

BREAKING CHANGES:
- require minimum MacOs version 10.10 Yosemite
2019-07-28 20:41:11 +02:00
Róbert Kiss 1134c1d16e chore: write kboot logs in development mode (#994) 2019-07-28 12:50:44 +02:00
Róbert Kiss 1b569aa82b chore: use fs-extra instead of mkdirp package (#992) 2019-07-28 12:32:30 +02:00
Róbert Kiss 66d6802920 chore: upgrade typescript => 3.5.3 (#993) 2019-07-28 12:31:37 +02:00
Róbert Kiss bf1689dd34 chore: upgrade fs-extra => 8.1.0 (#989) 2019-07-26 12:33:43 +02:00
Róbert Kiss f5e05f19b6 chore: upgrade ts-lib => 1.10.0 (#991) 2019-07-26 12:33:06 +02:00
Róbert Kiss 05b8fc89fe chore: remove autoprefixer
We don't use the package directly.
The @angular-devkit/build-angular@0.13.9 use the up to date version and
manage the css prefixing
2019-07-26 06:21:30 +02:00
Róbert Kiss cbccaba1c5 feat: Display/hide left keyboard half and merged/unmerged state (#987)
* feat: Display/hide left keyboard half and merged/unmerged state

* feat: improve the animation

* feat: decrease left fade animation time
2019-07-25 23:41:20 +02:00
Róbert Kiss a409c219d8 feat: Provide reasonable default mouse settings for Macs (#982)
* feat: Provide reasonable default mouse settings for Macs

* fix: hack to eliminate the double scrollbar
2019-07-25 22:02:52 +02:00
Róbert Kiss 2b84101975 chore: upgrade karma-coverage-istanbul-reporter => 2.0.6 (#986)
The new version uses newer version of the `handlebars` and it
protected `Prototype Pollution` vulnerability.
2019-07-23 18:41:13 +02:00
Róbert Kiss 1c551c0669 chore: upgrade tslint => 5.18.0 (#985) 2019-07-23 00:46:51 +02:00
Róbert Kiss fe24ebbefc chore: upgrade lerna => 3.16.1 2019-07-23 00:22:51 +02:00
Róbert Kiss a4cb4b7e0c style: remove extra space in user config reducer (#983) 2019-07-22 23:15:45 +02:00
Róbert Kiss cba93a41e0 chore: upgrade lodash => 4.17.15 (#981) 2019-07-22 21:29:07 +02:00
Eric Tang 9652152225 Sign CLA (#979) 2019-07-21 23:07:37 +02:00
László Monda ffcfce04d5 Make scripts terminate with a non-zero error code upon failure. 2019-07-20 13:04:11 +02:00
László Monda 7c6da6c4e6 Fix changelog. 2019-07-14 12:50:04 +02:00
László Monda 4c57f28a3c Update frimware version to 8.5.4 2019-07-14 12:48:38 +02:00
László Monda 4677829d56 Update changelog. 2019-07-14 12:45:16 +02:00
László Monda e812b7dfcc Make the help page a bit tighter. 2019-07-14 12:44:47 +02:00
Róbert Kiss 0290dee35c chore: the correct windows code sign certificate 2019-07-07 19:47:38 +02:00
Sam Rang 3c6c12d7a8 Sign CLA (#977) 2019-07-05 21:16:50 +02:00
Róbert Kiss 01aa9f119c chore: update windows code sign certificate (#976) 2019-07-03 22:54:37 +02:00
Kristian Sloth Lauszus 2850658055 Sign CLA (#975) 2019-07-02 02:44:32 +02:00
Spencer Owen c1e295c92d I have read the Agreement, and fully agree to it by signing it with my GitHub username. (#964) 2019-06-22 09:10:40 +02:00
Mikko Lakomaa 40d29886cb Sign CLA (#971) 2019-06-18 22:24:19 +02:00
Árpád Csányi a02c4deae1 Sign CLA. (#972) 2019-06-18 22:11:39 +02:00
József Farkas c1b7078549 Sign CLA (#970) 2019-06-13 22:50:43 +02:00
László Monda 293affacb3 Sort signatures alphabetically. 2019-06-13 11:00:40 +02:00
dgyimesi c41450d0dd Sign CLA. (#969) 2019-06-13 10:57:03 +02:00
László Monda a9ec8efb2b Sort signatures alphabetically. 2019-06-13 00:37:32 +02:00
Tim Coker d7ecd5a083 sign-cla (#968) 2019-06-13 00:36:07 +02:00
László Monda 8c4b13cd94 Sort names alphabetically. 2019-06-12 20:12:33 +02:00
Róbert Kiss b4ec69ff6d chore: ert78gb sign cla (#966) 2019-06-12 20:11:52 +02:00
László Monda 62f69b5f70 Alphabetically sort signatures. 2019-06-12 17:59:03 +02:00
Attila Csanyi e2fda9201f Sign CLA (#965)
I have read the Agreement, and fully agree to it by signing it with my GitHub username.
2019-06-12 17:58:18 +02:00
Nejc Zdovc bf9bfb8d82 CLA Nejc Zdovc (#963) 2019-06-10 12:43:15 +02:00
László Monda 02089d166c Update CONTRIBUTING.md 2019-06-07 21:43:56 +02:00
László Monda 3df6e8214b Update CONTRIBUTING.md 2019-06-07 21:41:55 +02:00
László Monda fbc8970baa Update CONTRIBUTING.md 2019-06-07 21:40:13 +02:00
László Monda 88b3b2fb65 Sign CLA. (#962) 2019-06-07 21:31:09 +02:00
László Monda 41f73acfce Add CLA. 2019-06-07 21:20:00 +02:00
Róbert Kiss 9d41f40d93 chore: use the correct license entry in the package.json of the uhk-web (#960) 2019-06-02 22:21:29 +02:00
Róbert Kiss 56ebfba8ad chore: move @types/* dependencies to the root package.json (#961) 2019-06-02 22:21:05 +02:00
Róbert Kiss 400f01dabe chore: upgrade @angular/cli => 7.3.9 and devkit => 0.13.9 (#959) 2019-05-31 12:36:27 +02:00
Róbert Kiss c64515885b chore: upgrade electron => 3.1.10 (#958) 2019-05-30 01:35:18 +02:00
Róbert Kiss 82c9126d82 refactor: use Buffer.from and Buffer.alloc instead of new Buffer() (#957) 2019-05-29 21:56:01 +02:00
Róbert Kiss 999feea488 chore: upgrade angular => 7.2.15 and ngrx => 7.4.0 (#956) 2019-05-29 20:28:29 +02:00
László Monda 4dd2400d36 Add a 1s delay to updateDeviceFirmware() 2019-05-23 01:26:32 +02:00
László Monda 5657579d6d Add a 1s delay to updateModuleFirmware() 2019-05-23 01:10:54 +02:00
Róbert Kiss 58b83f2b6b chore: upgrade jasmine* => 3.4.0 (#953) 2019-05-23 00:35:53 +02:00
Róbert Kiss b991e2c9d4 chore: upgrade lerna => 3.14.1 (#952) 2019-05-23 00:00:45 +02:00
Róbert Kiss e6495ded05 chore: upgrade node-hid => 0.7.8 (#951) 2019-05-22 23:27:40 +02:00
László Monda 21cab7e755 Revert "Rebuild node-hid for the usb repo to avoid "dev 1d50 / 6122 : usage_page:312d, usage:2e30" messages when using USB scripts."
This reverts commit 2dfb61a38e.
2019-05-22 21:23:23 +02:00
László Monda 2dfb61a38e Rebuild node-hid for the usb repo to avoid "dev 1d50 / 6122 : usage_page:312d, usage:2e30" messages when using USB scripts. 2019-05-22 18:09:36 +02:00
László Monda 2c93975c77 Rename {left,right}-addon to {left,right}-module 2019-05-15 23:41:42 +02:00
László Monda 427f706287 Rename {left,right}Addon to {left,right}Module 2019-05-15 23:35:05 +02:00
Róbert Kiss 1b59d96296 fix: don't show the udev setup info if udev v2 setup available (#943) 2019-04-30 03:05:03 +02:00
Róbert Kiss 20e2c8bbbc chore: upgrade jQuery => 3.4.0
fix: https://nvd.nist.gov/vuln/detail/CVE-2019-11358
2019-04-28 17:06:59 +02:00
László Monda c2f47f18b0 Link the UHK knowledgebase from the help page. 2019-04-24 17:00:15 +02:00
Tim Coker 1ee31003fd fix for middle clicking links (#937)
* fix for middle clicking links

* Found another link in the app

* Converted all links to use externaUrl decorator

* Missing semicolon

* Minor fixes for compilation/linting

* Changed help link back to embedded in html

* trigger builds

* trigger build for agreement removal
2019-04-24 16:09:32 +02:00
Róbert Kiss 4abdac1ef6 fix: delete LayerSwitcher on the dest layer when LayerSwitcher remove/changing (#939) 2019-04-18 01:58:16 +02:00
Róbert Kiss 32db3817e2 chore: upgrade stylelint to 10.0.0 (#938)
* chore: upgrade stylelint to 10.0.0

* Trigger build
2019-04-16 22:11:11 +02:00
Róbert Kiss 264752530f chore: upgrade bootstrap to 3.4.1 (#928)
* chore: upgrade bootstrap to 3.4.1

* fix: add whitelist to the toolbox sanitizer

* fix: remove unnecessary console.log
2019-04-16 21:02:13 +02:00
Róbert Kiss 33c910d70c chore: upgrade angular => 7.x (#925)
* Merge branch 'master' into chore-upgrade-angular-to-7

* reformat files of the store

* set preserveWhitespaces = true

* delete console.log from AutoGrowInputComponent

* fix null pinter exception when set the keyaction on an undefined key

* speed tuning

* delete svg-keyboard-key animation

* revert electron logger upgrade

* improve animation speed of scg-keyboard-key component

* fix: popover keymap tab visibility

* fix: remove btn-line css class
2019-03-04 10:27:25 +01:00
Róbert Kiss b1b2f1d431 chore: remove standard-version from devDependencies (#924)
We don't use standard-version to generate changelog
2019-02-28 19:16:27 +01:00
Skye Jensen c3a6b373d4 Update lerna dependency from 3.2.0 to 3.13.0 (#923) 2019-02-27 21:11:42 +01:00
Róbert Kiss f94b221ee9 feat: convert UdevRulesInfo to string enum (#921)
* feat: convert UdevRulesInfo to string enum

For easier log reading better to use string enum.

* fix typo
2019-02-24 22:04:46 +01:00
Róbert Kiss 3a1451a6a9 fix: agent falsely reports UHK detected (#922)
close #915
2019-02-24 19:48:36 +01:00
Róbert Kiss 7a2c8cb2e4 refactor: ngrx-store use enum ActionTypes and Action classes everywhere (#919) 2019-02-22 19:00:17 +01:00
Róbert Kiss de71f6f88c chore: upgrade lodash (#914) 2019-02-21 11:18:13 +01:00
Róbert Kiss 5fd555c214 refactor: remove console.log from popover component (#911) 2019-02-02 02:12:20 +01:00
Róbert Kiss 9a0b0f9df1 feat: redesign auto-update component (#910) 2019-02-02 02:11:54 +01:00
Róbert Kiss 12d361eb2e feat: save window state when closing agent (#902) 2019-01-30 02:47:23 +01:00
dgyimesi 2c041b64ff feat: Redesign About page. (#899)
* Redesign About page.

* feat: migrate About page to ngrx.

* Fix import relative path; order contributors by the number of contributions.
2019-01-27 00:43:57 +01:00
dgyimesi 8947f2dedf feat: Make the Agent application icon slightly smaller. (#898)
* feat: Make the Agent application icon slightly smaller.

* feat: generate icon.icns
2019-01-26 22:51:13 +01:00
Róbert Kiss 6b4cf41357 chore: upgrade gh-pages => 2.0.1 (#907)
fix: https://nodesecurity.io/advisories/658
2019-01-26 21:46:56 +01:00
dgyimesi c36156b497 feat: Make Right click, Esc set the key action to none (#897)
* feat: Make Right click, Esc set the key action to none

* refactor: use ts-keycode-enum; revert: escape from mapping on pressing escape.
2019-01-24 14:25:22 +01:00
Róbert Kiss d674fd4490 chore: upgrade electron => 2.0.16 (#903) 2019-01-24 03:22:12 +01:00
Róbert Kiss 8acc33e719 chore: set preserveWhitespaces: false in angular tsconfig.json (#904) 2019-01-24 01:41:52 +01:00
Mónus Tamás 2855480d6a fix: Pressing Tab after "update description" corrupts UI (#872) (#878)
* fix: Pressing Tab after "update description" corrupts UI (#872)

* Prevent focus on button groups by setting tabindex to -1.
2019-01-21 20:09:06 +01:00
László Monda eee3322082 Use TAG+="uaccess" instead of MODE:="0666", GROUP="plugdev" in the udev rules for better compatibility. Fixes #901 2019-01-21 14:47:17 +01:00
Róbert Kiss bb31c2cefa refactor: use rxjs pipe syntax (#900)
The `let` operator was not migrated because earlier two reducer needed be refactored
- user-configuration reducer
- present reducer

This commit is prerequisite of the angular upgrade.
2019-01-20 23:23:01 +01:00
dgyimesi e18a98d8bb fix: Don't change the tab immediately when closing the key action popover (#895) 2019-01-20 22:55:06 +01:00
Róbert Kiss 3964698cf7 feat: kboot package (#894)
* feat: kboot package

* feat: kboot package

* fix: wait 1 sec after device is available

* test: fix unit test

* refactor: clean unused codes

* doc: improve readme.md

* doc: improve readme.md

* test: fix unit test

* chore: fix lint settings

* style: fix linting issues
2019-01-18 17:37:31 +01:00
Róbert Kiss bfc08edfce chore(release): 1.2.13 2019-01-07 21:56:23 +01:00
Róbert Kiss 6e2115ac74 feat: kboot package (#889) 2019-01-07 21:36:36 +01:00
Róbert Kiss 1eb8720305 chore: reorganize npm script (#884)
The goal is every package should be responsible to `lint`, `build` and
`test` commands. This modification helps to easier add new package to
the repository.
2018-12-22 02:20:38 +01:00
Róbert Kiss c9f052b8c7 chore: delete unused webpack.config.js file in test-serializer package (#882) 2018-12-22 00:52:43 +01:00
Róbert Kiss 58ee42fcc2 chore: unify tsconfig.json files (#883) 2018-12-22 00:46:17 +01:00
Róbert Kiss 9112b597f8 fix: device recovery mode (#879) 2018-12-18 00:10:02 +01:00
Róbert Kiss 8c7d625573 build: set publisherName for win release 2018-11-15 22:33:22 +01:00
Róbert Kiss 52a57c0e87 build: upgrade electron-builder and remove unsupported appMetadata (#860) 2018-11-14 23:40:28 +01:00
Róbert Kiss a52b34fc3f Revert "chore: rebuild node-hid to hide USB usage data (#853)" (#861)
This reverts commit 1a14ac020e.
2018-11-14 23:14:05 +01:00
Róbert Kiss 1a14ac020e chore: rebuild node-hid to hide USB usage data (#853) 2018-11-14 22:22:24 +01:00
László Monda 330f7e72be Bump Agent version to 1.2.12 and update changelog. 2018-11-14 19:57:35 +01:00
Róbert Kiss 1ed6669ced fix: compare available devices by vid, pid, interface on linux (#854) 2018-11-13 21:44:22 +01:00
Róbert Kiss 108d60a497 feat: show os specific modifiers for macro actions (#855) 2018-11-12 23:22:26 +01:00
Róbert Kiss 1a9bd7de83 feat: show udev rules on missing device screen (#842)
* feat: show udev rules on missing device screen

* delete MissingDeviceComponent

* feat: change privilege and message device screen texts

* feat: change message device screen texts

* fix: load config from device

* fix: load config when hasPermission = true

* fix: load app start info after set permission rules

* fix: action dispatch

* fix: load config from device when UdevRulesInfo.Ok

* fix: load config from device when 0 device available

* feat: add extra space between the "old udev rule" and permission button
2018-11-09 01:30:40 +01:00
Róbert Kiss 10cd06c70b feat: allow 8.4.3 firmware features (#845)
* feat: allow 8.4.3 firmware features

* feat: remove "layer-double-tap" command line argument
2018-11-05 19:51:39 +01:00
László Monda 84b6c33c54 Upgrade to firmware 8.5.3 2018-10-30 04:02:24 +01:00
Róbert Kiss 18808eae9c fix: user Renderer2 instead of deprecated Renderer (#844) 2018-10-30 03:06:44 +01:00
Róbert Kiss ca74b0a76b feat: log USB device list before check permission (#837) 2018-10-22 21:32:16 +02:00
Róbert Kiss b45d60efb2 feat: log USB device list before check permission (#837) 2018-10-22 07:34:14 +02:00
Richard Prillwitz a4e3696078 chore: upgrade dependencies (#828)
* fixed vulnerabilities;

* update lerna from 3.1.4 to 3.2.0;

* fixed linter complaining about two empty lines in scss file;

* use fixed versions,
2018-10-16 19:17:12 +02:00
Róbert Kiss 2b963993d2 fix: stop event propagation when capturing keypress action (#817)
* fix: stop event propagation when capturing keypress action

* fix: save to keyboard shortcut allowed when keypress not capturing
2018-10-14 20:43:35 +02:00
László Monda e333022043 Add international scancodes. Fixes #807. 2018-10-09 23:02:07 +02:00
Róbert Kiss 2e2a59ccb8 feat: remove Stop/Eject keypress action (#819)
* feat: remove Stop/Eject keypress action

* feat: remove WWW and Launch Web Browser keypress actions
2018-10-08 02:35:48 +02:00
Róbert Kiss 6f073ad718 feat: use icon for play/pause keypress action (#818)
* feat: use icon for play/pause keypress action

* fix: use rectangle layout in svg-single-icon-key
2018-10-08 02:32:02 +02:00
László Monda 166834e46c Update udev rules based on the instructions of https://github.com/node-hid/node-hid/releases/tag/v0.7.2 2018-10-08 00:22:14 +02:00
László Monda 0ff2364b9e Update from firmware 8.2.5 to 8.5.2 2018-10-08 00:00:08 +02:00
Róbert Kiss 2cbfc6a11e fix: ui break when press tab key in keymap short name control (#816) 2018-10-07 23:21:25 +02:00
Róbert Kiss 404ccc7b2b chore: use default electron menu on mac in development mode (#815) 2018-10-07 22:42:39 +02:00
Róbert Kiss 42e413ab65 chore: upgrade node-hid => 0.7.3 (#814) 2018-10-07 22:29:10 +02:00
Róbert Kiss d57ef66038 feat: disable other popover tabs if the current key is layer switcher action (#813) 2018-10-07 22:14:36 +02:00
Róbert Kiss 843b4cbf68 feat: add "Edit" menu to MacOs build (#812) 2018-10-07 21:02:28 +02:00
Róbert Kiss 7e4b7c5c8b fix: macro action text overlap (#811) 2018-10-07 18:31:15 +02:00
László Monda 2ff65537a0 Update ISSUE_TEMPLATE 2018-10-06 20:28:13 +02:00
László Monda 6e2b1fb18d Add usbReportSemaphore to uhk.variableNametoId 2018-10-04 19:27:19 +02:00
László Monda 3e621a2818 Bump version to 1.2.11 and update package.json 2018-10-03 05:43:41 +02:00
Róbert Kiss 247ec4c1b2 feat: add backspace and caps lock icons (#803)
Summary:
- svg sprite generate with xmlns:xlink="http://www.w3.org/1999/xlink" namespace
- uhk-icon-agent-icon css class renamed to uhk-icon-pure-agent-icon because
  it collided with agent icon sprites
- added backspace and caps lock icons
2018-10-01 02:06:23 +02:00
Róbert Kiss edcff069fd fix: write agent version into the log when upgrade firmware (#802) 2018-09-30 22:48:42 +02:00
László Monda 8afdeac306 Fix right and middle mouse click macro actions which were exchanged. Fixes #794. 2018-09-27 00:35:13 +02:00
László Monda 425f861451 Add issue template regarding Karabiner Elements. 2018-09-26 00:05:14 +02:00
László Monda 5a843ed02c Include Agent version to the firmware update log. 2018-09-25 15:48:27 +02:00
László Monda f3bd83af03 Bump version to 1.2.10, update changelog and package.json 2018-09-24 04:21:24 +02:00
László Monda 0b3fca63b7 Add History Back and History Forward scancodes. Resolves #776. 2018-09-24 03:56:29 +02:00
László Monda cbd4460df0 Map Caps Lock without Ctrl on default keymaps. 2018-09-24 03:03:05 +02:00
László Monda b941bd9a75 Set the decelerated scroll speed of the default configuration to 10. 2018-09-24 02:32:25 +02:00
László Monda 439b84affc Save decelerated mouse scroll speed properly instead of using the accelerated scroll speed by accident. Fixes https://github.com/UltimateHackingKeyboard/firmware/issues/178 2018-09-24 02:21:00 +02:00
László Monda 66d5302e6f Add play/pause icon. Improves #591. 2018-09-21 01:43:15 +02:00
László Monda 9e2e2b9c5c Add more exact instructions to the permission setup screen. Fixes #781. 2018-09-21 00:56:50 +02:00
Róbert Kiss aa243ac7b0 feat: allow Layer Switcher secondary roles only on base layer (#790) 2018-09-21 00:20:46 +02:00
László Monda eb421e0681 Revert "Remove unused mustache file."
This reverts commit 63aae8f578.
2018-09-20 02:31:06 +02:00
László Monda 63aae8f578 Remove unused mustache file. 2018-09-20 02:08:58 +02:00
László Monda e577454a31 Make all SVGs non-executable. 2018-09-20 02:05:51 +02:00
László Monda e802bb0052 Remove unused SVGs. 2018-09-20 02:05:15 +02:00
László Monda b98e5df20a Add backspace and caps lock icons. Improves #83. 2018-09-20 01:42:05 +02:00
Róbert Kiss 7332105edb feat: remap on all keymap warning (#789) 2018-09-19 23:02:32 +02:00
László Monda 6a4feaf18d Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-09-16 21:30:58 +02:00
László Monda ee637d7958 Rename Scroll Lock to ScrLk and Num Lock to NumLk on keys. Improves #83. 2018-09-16 21:28:54 +02:00
Róbert Kiss 8d161ce8ff chore: upgrade Node.js => 8.12.0 (#783)
it's fix appveyor build
2018-09-16 21:17:40 +02:00
László Monda 8010bd8195 In the scancode select2 display "Print Screen SysRq" and add SysRq above PrtScn when rendering the key. Fixes #784. 2018-09-16 21:09:54 +02:00
Jan Christoph Ebersbach 059f1d5505 Fix swapped direction title for mouse movements (#778) 2018-09-16 01:16:11 +02:00
László Monda 123cab5724 Bump Agent version to 1.2.9 2018-09-13 20:42:07 +02:00
Róbert Kiss c16365a0e5 fix: Alt+Tab triggers "Remap on all layers" (#773) 2018-09-11 22:29:30 +02:00
Róbert Kiss a21d278c0c fix: modifier button layout (#772) 2018-09-11 21:56:30 +02:00
Róbert Kiss 0466916be1 fix: key modifier reordering (#771) 2018-09-11 00:29:22 +02:00
László Monda 9a845d8f6a Fix eeprom.js 2018-09-10 19:29:58 +02:00
Róbert Kiss 9ae1673499 feat: secondary role visualisation (#767)
* feat: secondary role visualisation

* fix: recalculate the text position of the secondary role if changes

* fix: recalculate the text position of SvgKeystrokeKeyComponent

* fix: recalculate the text position when changes anything

* fix: two line text key position calculation

* fix: fix space positioning

* fix: visualize second character of complex key

* style: remove extra line
2018-09-08 12:09:16 +02:00
László Monda 2d5a5e7aef Exchange Alt and Super modifiers in the key action popover. 2018-09-03 03:58:03 +02:00
Róbert Kiss 3e4d439852 feat: display OS-specific modifiers (#764)
* chore: git ignore "out-tsc/" folder in uhk-web package

* feat: add OperationSystem calculation to the app reducer

* feat: create os specific key modifier

* feat: Os specific texts

* revert: KeyModifierValues and getKeyModifiers selector

* refactor: remove unnecessary return

* refactor: rename OperationSystem => OperatingSystem
2018-09-03 00:21:55 +02:00
László Monda aba0b09109 Bump Agent to version 1.2.8 and update changelog. 2018-08-26 23:42:31 +02:00
László Monda af608ee17d Downgrade to firmware 8.2.5 2018-08-26 23:35:54 +02:00
Róbert Kiss df817e86d6 fix: use OnPush change detection on the keymap edit and add pages (#760)
* fix: use OnPush change detection on the keymap edit and add pages

* fix: font-size
2018-08-26 22:08:29 +02:00
Róbert Kiss a7d3b62512 chore: upgrade many dependencies and restructure tsconfigs (#757)
* chore: upgrade many dependencies and restructure tsconfigs

Summary:
- upgrade many dependencies
- remove dev dependencies from test-serializer and uhk-common
- created root tsconfig.json and test-serializer and uhk-common
  tsconfigs extends it
- fixed e2e test

* chore: upgrade more dependencies
2018-08-22 00:34:16 +02:00
Róbert Kiss b41f14192a chore: upgrade stylelint => 9.5.0 (#756)
it is fix "Unknown CSS word" error in IntelliJ
2018-08-21 20:43:18 +02:00
Róbert Kiss 475ec71983 fix: uncheck 'Remap on all keyboard' and 'Remap on all layer' checkbox by default (#754)
* fix: uncheck 'Remap on all keyboard' and 'Remap on all layer' checkbox by default

* fix: popover checkbox checked state
2018-08-21 20:41:54 +02:00
László Monda b5cff2fa93 Fix the padding of the secondary role tooltip. 2018-08-14 04:10:30 +02:00
László Monda 80e8c014ec Bind left and right Shift on the Mouse layer of all keymaps in the default configuration. 2018-08-08 17:00:32 +02:00
László Monda 67d42f666c Simplify the output of get-debug-info.js 2018-08-04 02:29:39 +02:00
László Monda fa32f95438 Add note to the LED brightness page saying that current UHK versions are not backlit. Also include spacing-bootstrap-3 2018-07-30 00:05:04 +02:00
László Monda 06878dd56a Remove the redundant scrollbar from the LED brightness page. 2018-07-29 00:28:34 +02:00
Róbert Kiss 374f6a3e6e chore: downgrade electron builder => 20.14.7 (#741)
* chore: downgrade electron builder => 20.14.7

* chore: downgrade electron builder => 20.8.1
2018-07-26 23:30:20 +02:00
László Monda 0b9c804a3d Bump Agent version to 1.2.7 and update changelog. 2018-07-26 22:20:28 +02:00
László Monda 365a459d61 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-07-26 22:16:33 +02:00
László Monda cec891a2c0 Change the shortcut which enables the USB stack test code, so that it can be triggered with the default Mac US keymap. 2018-07-26 22:15:21 +02:00
Róbert Kiss 8eb8aa3032 chore: upgrade electron builder => 20.26.0 (#740) 2018-07-26 22:06:32 +02:00
László Monda 38184e7968 Bump Agent version to 1.2.6 and firmware version to 8.4.0. Update changelog. 2018-07-26 06:04:47 +02:00
Róbert Kiss f6092ea195 fix: popover components use OnPush change detection (#727)
* fix: popover components use OnPush change detection

* fix: select2 selection bug

* chore: upgrade @ert78gb/ngx-select-ex => 3.7.0
2018-07-26 05:37:58 +02:00
László Monda ac7d66e338 Add keyboard shortcut for enabling the USB stack test mode of the firmware. Resolves #735. 2018-07-26 05:34:48 +02:00
László Monda b82a1da92a Remove usbVariables in favor of variableNameToId. 2018-07-25 11:44:57 +02:00
László Monda b8859f7b64 Make {get,set}-variable.js expect variable name and use async/await. 2018-07-25 02:08:36 +02:00
László Monda a04fa67446 Comment out the Settings menu until auto update is implemented. 2018-07-24 16:40:34 +02:00
Eric Tang ac89aff018 Add scripts for getting/setting firmware variables (#734) 2018-07-22 16:07:21 +02:00
Róbert Kiss e7cf8dc966 fix: no scroll when macro tab selected on popover (#731) 2018-07-17 22:08:45 +02:00
Róbert Kiss d0102f5bdb feat: add help page (#728)
* feat: add help page

* feat: add help page content
2018-07-16 23:05:41 +02:00
László Monda eb0daadf98 Overwrite the blhost binary with a statically compiled version that doesn't use special instructions.
See https://github.com/UltimateHackingKeyboard/agent/issues/681#issuecomment-403057795
2018-07-14 14:43:11 +02:00
László Monda 49d6ca173d Remove the blhost-old x86-64 Linux blhost binary. 2018-07-14 14:41:53 +02:00
László Monda a3eb6a6b7e Fix typo. 2018-07-11 14:48:28 +02:00
László Monda 144ed57b20 Fix epic typo. 2018-07-08 14:44:41 +02:00
Róbert Kiss 6086ddabf0 build: build only AppImage for Linux (#719)
upgrade:
 - electron-builder => 20.15.0
 - electron-log => 2.2.16
 - electron-rebuild => 1.8.1
2018-07-08 14:34:38 +02:00
Róbert Kiss 84f378a276 feat: add save to keyboard and remap shortcut keys (#712)
* feat: add save to keyboard and remap shortcut keys

* feat: Alt and Shift keys set the remapOnAllKeymap and remapOnAllLayer

* fix: control + enter trigger remap keymap
2018-07-08 14:31:48 +02:00
Róbert Kiss 648e8d5f2c feat: keep current selected layer when changing keymap (#714) 2018-07-05 23:58:44 +02:00
Róbert Kiss 15df8d7129 WIP feat: replace ng2-select2 => ngx-select-ex (#706)
* feat: replace ng2-select2 => ngx-select-ex

* feat: style the ngrx-select

* feat: replace secondary role select2

* feat: replace Select2OptionData => SelectOptionData

* feat: replace select2 => ngx-select in macro-tab component

* feat: replace select2 => ngx-select in keymap-tab component

* feat: fix styles

* chore: remove select2 from dependencies

* fix: macro editor overflow

* fix: set the same font size for the toggle button

* fix: overflow

* chore: use @ert78gb/ngx-select-ex version of ngx-select-ex
2018-07-02 23:44:39 +02:00
Sylvain Benner cfc0af9655 Fix Sleep key for macOS users in Mac keymaps and Fn layers (#707)
Reference: https://support.apple.com/en-us/HT201236
2018-06-29 12:19:59 +02:00
László Monda f02e3181a6 Improve the phrasing of the firmware update error message. 2018-06-28 18:49:01 +02:00
Róbert Kiss 3d59bcf97e feat: Tweak unsupported Windows firmware update notification (#705)
* feat: Tweak unsupported Windows firmware update notification

* feat: Display firmware update status

* feat: throw error when left half not connected under firmware upgrade
2018-06-28 18:41:16 +02:00
László Monda 5e4fc983fb Rename the "Remap Key" button to "Remay key". 2018-06-27 21:28:16 +02:00
László Monda 32d9635b34 Tone down the color of the separator line. 2018-06-26 06:05:03 +02:00
László Monda 3978011d2e Bump Agent version to 1.2.5 and update changelog. 2018-06-26 03:13:49 +02:00
László Monda cd1952a7df Restore blhost as blhost.old from 0f24427628 2018-06-26 02:21:33 +02:00
László Monda 4251477451 Comment out the export keymap icon because there isn't a way to import keymap yet, so it's useless. 2018-06-26 01:53:04 +02:00
Róbert Kiss 873f1de1ef fix: cancelling the key action popover holds its state (#699) 2018-06-25 00:27:14 +02:00
Róbert Kiss 150f993e5f feat: change side menu Agent icon (#698) 2018-06-25 00:05:01 +02:00
Róbert Kiss 06e76e5e0f fix: only flash the remapped key (#697) 2018-06-24 23:39:32 +02:00
Róbert Kiss a208a264c7 fix: only animate keyboard separator when splitting (#696) 2018-06-24 23:06:33 +02:00
Róbert Kiss 114014fa13 feat: Show not supported OS on firmware page when relevant (#695) 2018-06-24 22:16:00 +02:00
Róbert Kiss 94cfd9d2e9 fix: SwitchKeymapAction not allow to refer to itself (#694) 2018-06-24 20:32:32 +02:00
Róbert Kiss 0aa9c73b4b feat: log firmware version before upgrading firmware (#693) 2018-06-24 19:56:11 +02:00
Róbert Kiss 5234f85dbe fix: close device when any error occurred in the communication (#692) 2018-06-24 18:59:13 +02:00
László Monda bd8a2f704f Bump version to 1.2.4 and update changelog. 2018-06-21 18:23:49 +02:00
László Monda 439886d69f Replace Linux x86-64 blhost with a statically linked version that should run fine on every Linux distro. 2018-06-21 18:10:55 +02:00
László Monda b2a37795e3 Add agent-logo-with-text.svg 2018-06-19 23:54:03 +02:00
László Monda 440db56080 Bump Agent version to 1.2.3 and update changelog. 2018-06-19 03:07:26 +02:00
László Monda 337e6e6bb6 Add example to the secondary role tooltip. 2018-06-19 02:44:44 +02:00
László Monda a1aeda3d35 Further tweak the scancode tooltip. 2018-06-19 01:26:20 +02:00
László Monda c6a83f8c9b Merge branch 'feat-tooltip-width' 2018-06-19 00:04:14 +02:00
László Monda 0f24427628 Replace the Linux x64 blhost binary with @iprok's version that seems to be more stable. 2018-06-18 23:53:51 +02:00
Róbert Kiss f52dc36a6a feat: allow wider tooltip width than parent container (#682) 2018-06-18 23:37:15 +02:00
Róbert Kiss 63a936968d feat: allow wider tooltip width than parent container 2018-06-18 23:31:34 +02:00
László Monda cabfde7963 Tweak the text of the scancode tooltip. 2018-06-18 23:26:06 +02:00
László Monda 79628c2351 Tweak the text of the key remap tooltip. 2018-06-18 22:49:48 +02:00
Róbert Kiss 762fa6f8bf fix: remap SwitchLayerAction 2018-06-18 19:50:34 +02:00
László Monda a258c097a9 Downgrade to firmware 8.2.5 because it's the latest recommended version that doesn't contain annoying bugs. 2018-06-18 19:14:38 +02:00
László Monda 41faa98fcd Update the firmware update instructions and URL. 2018-06-16 18:22:01 +02:00
Róbert Kiss c4d7318686 chore: make firmware update log shorter (#675)
* chore: add lodash to the roor package.json

* chore: make firmware update log shorter
2018-06-13 10:07:40 +02:00
Róbert Kiss 9ef11eaa34 feat: add keyboard separator line (#673)
* fix: blhost wrapper return with Promise.reject if error code !== 0

* feat: add keyboard separator line
2018-06-13 00:39:14 +02:00
Róbert Kiss f34cb2df56 feat: remap key on all keymaps / layers (#668)
* add: popover checkboxs

* feat: add KeyActionRemap

* fix: template driven form checkbox name

* fix: delete key action only if it SwitchLayerAction

* feat: use remap on all keymaps/layers checkbox values in SAVE_KEY action

* feat: set default value to the remapOnAllKeymap and remapOnAllLayer checkbox

* fix: layer mapping
2018-06-10 21:50:49 +02:00
Róbert Kiss 83b9f0d1e9 fix: blhost wrapper return with Promise.reject if error code !== 0 (#669) 2018-06-07 23:38:27 +02:00
Róbert Kiss 7d81cf0c6a style: fix tslint error in switch-layer-action.ts (#666) 2018-06-07 22:54:20 +02:00
tenteen 82b76a9455 Fix left half timeout during fw update (#567) (#626)
The snooze call is skipped in the try block when the command throws an
exception.  As a result, the command tries maxTry times as fast as
possible.

The fix is to move the snooze call outside of the try block.

PS: #GotMyUHK
2018-06-07 22:50:18 +02:00
Róbert Kiss 4ae577f936 feat: make double tap to hold layer optional per key (#662)
* feat: make double tap to hold layer optional per key

* test: fix test serializer

* fix: remove "application start" text

* Add double-tap.svg

* Add closing dot at the end of the sentence.

* fead: add double-tap icon

* Bundle firmware version 8.3.0

* feat: 'layer-double-tap' feature flag

* feat: convert SwitchLayerMode to string enum
2018-06-07 22:11:41 +02:00
László Monda 81a83994ab Make the Export device configuration button show up as a primary button. 2018-05-28 15:58:17 +02:00
László Monda 1d3a3c7f5f Fix changelog. 2018-05-27 20:04:48 +02:00
László Monda 8bb645125d Update changelog and re-release v1.2.2 2018-05-27 02:53:10 +02:00
László Monda 9471b31a5d Instruct the user to power cycle the keyboard when encountered with an invalid hardware configuration. 2018-05-27 02:43:12 +02:00
László Monda ffa52757c9 Upgrade to firmware 8.2.5 2018-05-27 02:31:22 +02:00
Róbert Kiss ee53a0df9b feat: set disable style of device name in side menu (#656)
* feat: visualise disabled state of the 'Device name' input control

* fix: original value handling
2018-05-27 02:30:41 +02:00
Róbert Kiss 8e20c85e07 feat: add file upload component (#655)
The component allow upload the same file multiple times
2018-05-26 22:46:41 +02:00
László Monda 65ea786358 Don't include os.platform into the firmware update log because os.type makes it practically redundant. 2018-05-26 17:13:10 +02:00
László Monda 1035837b3b Fix lint error. 2018-05-22 15:29:48 +02:00
Róbert Kiss 18fc2e6b3f fix: permission detection when device not plugged (#653) 2018-05-22 15:11:43 +02:00
László Monda fc728697d7 Bump version to 1.2.2 and update changelog and package.json 2018-05-22 02:19:48 +02:00
László Monda cdf3caee9e Display device list at the beginning of the firmware update process. 2018-05-22 01:53:14 +02:00
László Monda 0a4d3a002e Include operating system type to the firmware update log. Add a new tip to the firmware page. 2018-05-22 01:16:02 +02:00
László Monda d11c532ea4 Add a lot of useful instructions to the firmware page. 2018-05-22 00:38:27 +02:00
László Monda 1ff51697b1 Upgrade from firmware 8.2.2 to 8.2.4 2018-05-21 14:34:42 +02:00
Róbert Kiss ab8ae31324 fix: permission detection on linux (#651) 2018-05-21 11:46:19 +02:00
László Monda daa0e723b1 Display more detailed "invalid hardware configuration" errors. 2018-05-21 11:03:05 +02:00
Róbert Kiss 609aba856a fix: permission detection on win and mac (#650) 2018-05-21 11:00:57 +02:00
Róbert Kiss a6678bd537 feat: update firmware version after update (#649)
* feat: add clipboard copy icon to the x-term-component

* feat: start device poll after firmware upgrade

* feat: remove the OK button from the firmware upgrade page

* feat: read the firmware after firmware upgrade

* fix: scrolling of the x-term-component

* feat: refresh the firmware version after recovery device

* fix: remove the scrollbar styling

* fix: stay on device firmware upgrade screen
2018-05-21 10:57:34 +02:00
László Monda 6c4f580fc2 Check if the keyboard is in factory reset mode and if so, display a relevant instruction. 2018-05-20 01:40:45 +02:00
László Monda ea41661c65 Add erase-user-config.js 2018-05-19 21:53:41 +02:00
László Monda c553c7b63b Rename erase-hca.js to erase-hardware-config.js 2018-05-19 21:33:12 +02:00
László Monda e5988aa800 Rename write-hca.js to write-hardware-config.js 2018-05-19 21:32:15 +02:00
László Monda ae319c607f Rename write-userconfig.js to write-user-config.js 2018-05-19 21:14:48 +02:00
László Monda 5d23ad1c9e Fix write-hca.js and write-user.js, and remove write-config.js. Fixes #627. 2018-05-19 20:59:11 +02:00
László Monda 55eef50da7 Add erase-hca.js 2018-05-19 20:05:41 +02:00
Róbert Kiss 653465f0e0 feat: device recovery mode (#642)
* add new page and ipc processing

* refactor: remove unused references from uhk.js

* feat: add device recovery route

* refactor: device permission

* feat: write firmware update log to the screen

* fix: xterm height

* feat: add reload button to the recovery page

* refactor: deviceConnectionState.hasPermission in appStartInfo

* refactor: use correct imports

* refactor: move .ok-button css class to the main style.scss

* feat: add bootload active route guard

* style: move RecoveryDeviceAction into new line

* feat: delete reload button

* feat: start device polling after device recovery
2018-05-19 17:22:46 +02:00
László Monda 2cf8044987 Check the signature of the hardware configuration area instead of uniqueId. 2018-05-19 14:07:18 +02:00
László Monda 3c056a7255 Display "Invalid hardware configuration" when the hardware configuration area is uninitialized instead of a general error message. Improves #623. 2018-05-19 13:38:16 +02:00
Róbert Kiss 091796d13c feat: not allow non ascii character in macro action text (#645) 2018-05-17 23:56:36 +02:00
László Monda eb97dd844f Make the bootloader timeout of the reenumerate script specifiable. 2018-05-16 23:19:36 +02:00
Róbert Kiss 17693ec8fe build: upgrade node.js => 8.11.2 (#641) 2018-05-16 22:08:11 +02:00
Róbert Kiss 7c7ce8f50f feat: only send auto update notification when user indicated the update (#640)
* feat: only send auto update notification when user indicated the update

* fix: add more logging to the auto update process
2018-05-16 22:05:13 +02:00
László Monda e294727ac5 Bump Agent version to 1.2.1 and update the changelog. 2018-05-12 11:26:41 +02:00
László Monda f29d64c803 Rename kbootKommandName to kbootCommandName. 2018-05-09 02:16:38 +02:00
László Monda 0385b0ce29 Simply write that the list of available devices is unchanged instead of always listing the devices. 2018-05-09 01:32:55 +02:00
László Monda b526274cd7 Upgrade to firmware 8.2.2 2018-05-09 00:38:48 +02:00
László Monda 88c16af4a9 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-05-08 17:17:36 +02:00
László Monda 05ac9a6832 Clarify the content of the tooltop regarding non-US characters. 2018-05-08 17:17:04 +02:00
Kristian Sloth Lauszus 04aa5236c2 The usage page and usage number was changed in https://github.com/UltimateHackingKeyboard/firmware/pull/112/commits/6f0b1adc14c293c05ecc0c8039b5ca516917e59e (#630) 2018-05-06 21:38:40 +02:00
László Monda ec98e4e1c6 Rephrase and add explanations about the macro engine not being ready yet. 2018-05-06 03:24:54 +02:00
László Monda bb9ece494c Update README.md 2018-05-05 21:55:52 +02:00
László Monda 217e6776ac Add changelog entry that I forgot to add. 2018-05-03 01:38:40 +02:00
László Monda 2286218980 Make long media key macro actions work. (#621)
* Make long media key macro actions work.

* fix: macro key action mapping
2018-05-03 00:28:35 +02:00
Róbert Kiss 3d9c83f9f4 build: check node version before build (#625)
* build: check node version before build

* use package.json engine section
2018-05-01 22:50:28 +02:00
Róbert Kiss 14ed163238 chore: npm run clean delete root node_modules and dist folders (#624) 2018-05-01 22:46:23 +02:00
László Monda c815de0718 Edit phrasing: "... layer by *tapping* this key" 2018-05-01 03:20:44 +02:00
László Monda 6a46556d9e Make get-right-firmware-version.js display not only firmware version but also device protocol version, module protocol version, user config version and hardware config version. 2018-05-01 02:31:17 +02:00
krokofant f8f820529f Resolve #553 (#614) 2018-04-29 21:32:33 +02:00
László Monda cac11155e7 Update firmware version to 8.2.0 2018-04-20 10:04:21 +02:00
László Monda d20870f11e Update firmware version and default mouse speed. 2018-04-20 09:49:27 +02:00
László Monda 10ceb6c79d Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-04-20 09:19:58 +02:00
Róbert Kiss b38b6fa294 build: fix nouislider conflict in webpack conflict (#611)
* build: fix nouislider conflict in webpack conflict and upgrade nouislider

* use package import instead of sub file
2018-04-20 09:19:10 +02:00
László Monda 94c1d35429 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-04-19 22:31:25 +02:00
László Monda e33cef4e89 Update README. Fix #609 2018-04-13 19:32:20 +02:00
Róbert Kiss 9b815ed9c1 chore: upgrade angular to 5.3.9 and typescript to 2.6.2 (#605)
* chore: upgrade angular to 5.3.9 and typescript to 2.6.2

* fix electron renderer build

* fix webpack config

* format webpack.config

* fix renderer build
2018-04-10 19:52:58 +02:00
László Monda 1d4bb6113c Bump version to 1.1.5 in package.json and update the changelog. 2018-04-10 11:42:34 +02:00
Róbert Kiss 136120b831 feat: not allow run multiple Agent (#603) 2018-04-09 21:09:09 +02:00
Róbert Kiss cd299c06d6 feat: not allow run multiple Agent (#604) 2018-04-09 20:48:22 +02:00
László Monda e152a36ad7 Add agent-app-icon.png which I forgot to add. 2018-04-09 14:16:09 +02:00
László Monda e90544db33 Bump Agent version to 1.1.4 in package.json and update the changelog. 2018-04-09 13:59:38 +02:00
László Monda 7ceca202b4 Reposition the ISO key in the scancode list. 2018-04-09 12:48:44 +02:00
László Monda ddc65aa54b Replace application icon with a diagonal gradient based icon that should look better on the desktop. 2018-04-09 12:20:46 +02:00
Róbert Kiss 13ec617d58 Make saving the configuration more robust (#594)
* feat: Make saving the configuration more robust

* parse backup user config before return

* fix some bug

* Add write-userconfig.js and invalid-config.bin

* throw exception if failed user config parsing

* Merge branch 'master' into feat-467-make-save-more-robust

* hide keymaps and macros if agent in restore mode

* fix Device name settings
2018-04-09 10:11:26 +02:00
Róbert Kiss 00c5b69129 fix: display agent icon when user use ALT + TAB (#600) 2018-04-07 23:17:50 +02:00
Róbert Kiss 6ccf005750 feat: Handle privilege escalation gracefully even without PolicyKit (#599)
* feat: Handle privilege escalation gracefully even without PolicyKit

* build: upgrade tslint => 5.9.1

* build: add uhk-agent/package-lock.json

* feat: add error animation

* fix: display agent icon when user use ALT + TAB
2018-04-07 23:09:47 +02:00
László Monda 6e1f0ded9e Bump Agent version to 1.1.3 and update changelog. 2018-04-06 16:26:21 +02:00
László Monda d58386ef4b Reference firmware 8.1.5 2018-04-04 15:51:04 +02:00
László Monda 179c982bfb Make the Fn+Backspace shortcut of the QWERTY for PC keymap switch to the TES keymap for testing purposes. 2018-04-03 23:25:30 +02:00
László Monda a7d07dbf4c Make factory-update.js allow the layout to be set. 2018-04-03 21:04:47 +02:00
László Monda 0ca922d24a Sleep 1s between sending reset and idle kboot commands. Hopefully this will always make the left half resume after firmware updates. 2018-04-03 00:49:51 +02:00
László Monda a6f1aa15a5 Supply the correct configBufferId values to launchEepromTransfer() and get rid of the obsoleted eepromTransfer mapping. 2018-04-02 23:54:48 +02:00
László Monda fc2d025cc4 Don't display the buffer related USB transfers of writeConfig() because they generate too much noise. 2018-04-02 23:32:13 +02:00
László Monda 8b5ae106bd Display kboot command names instead of numberic ids. 2018-04-02 23:20:07 +02:00
László Monda 44639bbf53 Make apply-config.js and get-module-state.js use read() instead of readSync() 2018-04-02 22:56:28 +02:00
László Monda 9fcce9234a Make getDeviceState await. Dump transfer descriptions before the actual transfers when the debug mode is on. 2018-04-02 21:35:47 +02:00
László Monda b26fecfc7a Make factory-update.js switch keymap. 2018-04-02 18:28:12 +02:00
László Monda 1b15911783 Extract code to uhk.writeUca() 2018-04-02 17:31:27 +02:00
László Monda 148dd8d361 Rewrite writeHca() using the JavaScript USB API instead of TypeScript because the latter couldn't reopen the USB device. 2018-04-02 17:25:35 +02:00
László Monda 0d9ac50999 Move writeHca() to uhk.js 2018-04-02 14:47:48 +02:00
László Monda e19e4bc5a4 Move the gist of write-hca.js into writeHca() 2018-04-02 14:43:11 +02:00
László Monda bdd79a5a9a Clean up writeConfig() a bit. 2018-04-02 14:32:45 +02:00
László Monda fb4e05fdc4 Dump USB reads and writes via writeDevice() 2018-04-02 00:30:03 +02:00
László Monda 01fcf9053a Strip down factory-update.js to its essentials. 2018-04-02 00:11:35 +02:00
László Monda 533c2f13d2 Copy update-firmwares.js as factory-update.js 2018-04-01 23:58:13 +02:00
László Monda b9c32b46a9 Extract uhk.applyConfig() and uhk.launchEepromTransfer() 2018-04-01 23:55:40 +02:00
László Monda f9b7260be6 Extract uhk.writeUserConfig() 2018-04-01 01:23:50 +02:00
László Monda 847694d590 Rewrite write-config.js using async/await. 2018-04-01 01:13:17 +02:00
László Monda 58178a5c7b Extract uhk.updateFirmwares() 2018-03-31 23:50:02 +02:00
László Monda 9b93b4dac5 Rename update-all-firmwares.js to update-firmwares.js 2018-03-31 23:24:34 +02:00
Róbert Kiss 478dac0621 build: extract electron dependencies to the root package.json (#593) 2018-03-31 22:11:41 +02:00
László Monda f196fcdaa2 Make switch-keymap.js accept a keymap abbreviation. 2018-03-30 19:17:42 +02:00
László Monda 0b420ff516 Extract uhk.switchKeymap() 2018-03-30 18:59:50 +02:00
László Monda 7656af76e4 Add switch-keymap.js 2018-03-30 12:48:28 +02:00
László Monda beed546ae4 Remove switch keymap actions that point to the TES keymap. 2018-03-29 19:09:00 +02:00
László Monda bf94370f2f Add the "Export device configuration" button instead of the export link. Make the button export JSON by default and BIN when pressed with Shift. 2018-03-29 18:44:09 +02:00
László Monda 2476049681 Out of play, play/pause, stop, and pause only leave play/pause in the default configuration. 2018-03-29 18:12:08 +02:00
László Monda f8d8b6d213 Remove Launch Browser, Launch Calculator, and Eject Disk key actions from the default configurations because they don't work reliably across OSes and very rarely used. 2018-03-29 14:51:06 +02:00
László Monda 05bbce1d50 Remove redundant stop media playback actions. 2018-03-29 13:27:13 +02:00
László Monda 32494fa228 Remove relative switch keymap actions. 2018-03-29 13:12:27 +02:00
László Monda e0ce38988e Remove shut down key actions, only keep sleep key actions, and bind them to the \ key. 2018-03-29 12:54:51 +02:00
László Monda 5c660c549d Update the test keymap. This one should be the final version. 2018-03-28 20:56:56 +02:00
László Monda 510b914e26 Change terminology from download / upload to export / import for greater clarity. 2018-03-28 18:27:27 +02:00
László Monda cf64fc0c08 Make the tooltip text regarding non-US characters easier to understand. 2018-03-25 22:24:33 +02:00
Róbert Kiss b25bc9d81d feat: show firmware version of the device/modules on firmware page (#589) 2018-03-23 07:10:02 +01:00
Róbert Kiss 2f00a5eaf4 feat: enhance device firmware page (#588)
* feat: enhance device firmware page

* remove confirmation dialog from firmware upgrade buttons
2018-03-15 12:20:35 +01:00
László Monda e8fe0f8d3e Fix menu scancode. (#586)
* Fix menu scancode.

* Change the old menu key scancode 118 to 101.

* validate scancodes
2018-03-11 22:56:12 +01:00
László Monda e84dbf2c15 Bump Agent version to 1.1.2. Bump firmware version to 8.1.4. Update changelog. 2018-03-09 19:02:46 +01:00
Róbert Kiss 990ff8e980 ci: mac code sign (#585)
* ci: register certificate into the mac keychain

* try to not use yarn electron-builder installer on mac

* use -P

* debug electron-osx-sign

* use cscLink

* use xcode xcode9.3beta

* increase package.json version

* revert version to 1.1.1

* delete unused files

* format release.js file

* format release.js file

* format release.js file
2018-03-09 18:31:48 +01:00
Róbert Kiss 1ca8e67e52 try to use xcode 9.2 (#584) 2018-03-08 18:09:17 +01:00
Róbert Kiss 23cb583bf7 chore: upgrade lerna => 2.9.0 (#583) 2018-03-06 00:34:06 +01:00
Róbert Kiss d5cc735b85 build: Windows code sign (#581)
* build: Add windows certificate

* temporary bump version

* change CSC_LINK settings

* rdp connection

* remove appveyor RDP block
2018-03-01 17:29:55 +01:00
László Monda 1981311136 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-02-28 00:31:48 +01:00
László Monda bbb5d4a35b Add a notice regarding the lack of robustness of the firmware update process. 2018-02-28 00:31:06 +01:00
serge-rosov 58ef40fb02 year correction (#582) 2018-02-27 18:11:46 +01:00
Róbert Kiss b8f35df155 build: switch off mac codesign 2018-02-24 23:33:22 +01:00
Róbert Kiss c3e712851c build: Sign mac installer 2018-02-24 23:12:01 +01:00
László Monda 2eaa1e0634 Update package-lock.json 2018-02-19 17:11:16 +01:00
László Monda 6ee21bcd7a Fix get-debug-info.js 2018-02-18 03:44:17 +01:00
Róbert Kiss 10ae68ad4b fix(keymap): Fix undefined keymap serialization (#573) 2018-02-17 18:07:33 +01:00
László Monda 02044ae1d0 Bump version to 1.1.1 and update changelog. 2018-02-13 03:54:28 +01:00
László Monda 3f99d47bba Use firmware 8.1.2 2018-02-13 03:40:52 +01:00
László Monda 9beadb4aac Add keymap descriptions. 2018-02-13 03:24:06 +01:00
László Monda d9fb7a4b42 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-02-13 03:05:18 +01:00
László Monda 83912ec21f Assign "switch to test keymap" action on all keymaps. 2018-02-13 03:04:36 +01:00
Róbert Kiss 6c7232a5ba feat(device): Make Agent able to unbrick bricked modules (#577) 2018-02-13 02:11:27 +01:00
László Monda 65fc8b5efb Tweak the scancode related help text. 2018-02-12 15:36:39 +01:00
Róbert Kiss 7a64191955 fix(config): Save reset user configuration in web module (#574) 2018-02-11 20:44:08 +01:00
Róbert Kiss 1a413c824e Fix 560 delete bind play macro action when macro delete (#576)
* fix(config): delete KeyAction binding of deleted macro

* refactor: use sorter import

* fix(macro): read the macro id from route params

* fix(keyAction): use NoneAction in keyAction mapping
2018-02-11 20:12:12 +01:00
Róbert Kiss e545c9d67b feat(popover): Add Non-US help tooltip (#578) 2018-02-11 19:47:41 +01:00
László Monda 8650fef7ae Make reenumerate() more reliable. 2018-01-31 04:26:49 +01:00
László Monda 5c618869a2 Use updateDeviceFirmware(), reenumerate(), and updateModuleFirmware() in update-all-firmwares.js instead of forking processes. 2018-01-31 03:40:46 +01:00
László Monda 1b8d6949e0 Extract updateModuleFirmware() to uhk.js 2018-01-31 03:03:34 +01:00
László Monda aabc0a8746 Use waitForKbootIdle() in update-module-firmware.js 2018-01-31 02:28:29 +01:00
László Monda 9589398834 Move waitForKbootIdle() to uhk.js 2018-01-31 02:25:37 +01:00
László Monda 933a715ea5 Extract waitForKbootIdle() 2018-01-31 02:22:41 +01:00
László Monda df14e2d569 Extract uhk.jumpToModuleBootloader() and use it. 2018-01-31 01:17:28 +01:00
László Monda 4f8a0247d3 Call uhk.sendKbootCommandToModule() instead of forking send-kboot-command-to-module.js 2018-01-31 00:57:53 +01:00
László Monda 85ec5f6b6a Make update-module-firmware.js use reenumerate() and sendKbootCommandToModule() instead of forking more processes. 2018-01-31 00:17:27 +01:00
László Monda 739b830f47 Use uhk.writeDevice() in jump-to-module-bootloader.js 2018-01-31 00:09:16 +01:00
László Monda 482cff3d3b Extract sendKbootCommandToModule() from send-kboot-command-to-module.js to uhk.js 2018-01-30 23:44:25 +01:00
László Monda 9284ae5032 Use reenumerate() instead of forking reenumerate.js 2018-01-30 23:32:37 +01:00
László Monda cac6fdc190 Move updateDeviceFirmware() from update-device-firmware.js to uhk.js 2018-01-30 21:48:42 +01:00
László Monda ca9bf60a1b Extract updateDeviceFirmware() 2018-01-30 21:46:39 +01:00
László Monda bb7edb8e4d Remove shared.js 2018-01-30 21:39:05 +01:00
László Monda 0d9c976eb8 Move execRetry() from shared.js to uhk.js 2018-01-30 21:37:27 +01:00
László Monda 288d4f75b6 Move getBlhostCmd() from shared.js to uhk.js 2018-01-30 21:35:35 +01:00
László Monda 73e07eae2d Move checkFirmwareImage() from shared.js to uhk.js 2018-01-30 21:28:00 +01:00
László Monda 8e620caac5 Use reenumerate() in update-device-firmware.js instead of forking reenumerate.js 2018-01-30 20:39:48 +01:00
László Monda 0d4e1acf76 Extract reenumerate() from reenumerate.js to uhk.js 2018-01-30 19:34:29 +01:00
László Monda 88c42d58b1 Extract reenumerate() as an async function in reenumerate.js 2018-01-30 18:36:16 +01:00
László Monda 5099e904fc Use uhk.writeDevice() in set-i2c-baud-rate.js 2018-01-30 17:30:12 +01:00
László Monda 5476f7c3a5 Extract I2C0_F. 2018-01-30 17:25:29 +01:00
László Monda e0bb0bcca3 Add the async uhk.writeDevice() and use it in get-i2c-baud-rate.js 2018-01-30 17:21:50 +01:00
László Monda 124c3ec29b Simplify reenumerate.js mainly by using uint32ToArray() 2018-01-30 06:09:09 +01:00
László Monda 2310320b8a Replace pushUint32() with uint32ToArray() and don't use it where not needed. 2018-01-30 05:30:32 +01:00
László Monda 67346b4cda Simplify getTransferData() 2018-01-30 05:10:29 +01:00
Róbert Kiss 662ca0152f fix(keymap): Don't show keymap description in the key action popover (#572) 2018-01-29 23:40:41 +01:00
Róbert Kiss 6358528438 ci: use node 8.9.4 (#571)
Node 8.9.4 contain a few security update and use npm 5.6.0 so not need to
install npm in the build process. The build time will a few sec sorter
2018-01-29 23:20:07 +01:00
József Farkas 02f1053d46 feat(popover): sort keymaps and macros alphabetically (#534)
* feat(popover): sort keymaps and macros alphabetically

Closes #512

* small performance refactoring
2018-01-29 23:15:21 +01:00
Róbert Kiss a44a7dc5f8 chore: use lodash-es version (#569)
lodash-es support tree shaking and the bundle size will near 2MB less
2018-01-29 23:02:17 +01:00
Róbert Kiss 02d57fdabf feat(keymap): add description to keymap (#559)
* feat(keymap): add description to keymaps

* add new feature request

* preserve new lines
2018-01-29 22:54:29 +01:00
Róbert Kiss 38f6688930 chore: upgrade electron => 1.7.11 (#568) 2018-01-29 21:26:32 +01:00
Róbert Kiss 6ca12d0ccd build: set Apple appId => com.ultimategadgetlabs.agent (#566) 2018-01-23 19:19:15 +01:00
László Monda acd17ac657 Fix the background color of the toplevel device node. Fixes #552 2018-01-22 04:41:43 +01:00
László Monda 5393501f68 Update CHANGELOG.md 2018-01-16 19:43:10 +01:00
László Monda 99e020d66f Bump Agent version to 1.1.0 and update package.json and the changelog accordingly. 2018-01-15 19:02:29 +01:00
László Monda 2c74ce8d3e Reference firmware 8.1.0 and adopt the newly introduced "v" git tag prefix for firmware tags. 2018-01-15 12:04:11 +01:00
László Monda 3cd2d208b9 Make get-i2c-health.js output uptime and baud rate. 2018-01-15 01:37:52 +01:00
László Monda d0cd30f915 Add get-i2c-health.js 2018-01-15 01:21:56 +01:00
László Monda 010a23aaeb Extract slaveI2cErrorBufferToString() 2018-01-15 01:07:23 +01:00
László Monda c723fe2651 Simplify get-slave-i2c-errors.js by using padEnd() 2018-01-15 00:55:38 +01:00
László Monda 95caa58624 Utilize uhk.getUint* in get-slave-i2c-errors.js 2018-01-15 00:37:31 +01:00
László Monda 9089f088b6 Clean up get-left-firmware-version.js a bit. 2018-01-15 00:31:24 +01:00
László Monda 1aeb4e8326 Make get-left-firmware-version.js display module protocol version, too. 2018-01-15 00:07:30 +01:00
László Monda 96b9226adb Fix script to display the correct firmware version. 2018-01-15 00:02:57 +01:00
László Monda 7c065f4368 Remove --buspal speed specification because it gets disrespected by the firmware anyways. 2018-01-14 22:13:31 +01:00
Róbert Kiss a8108b9abf revert: Revert auto write user configuration (#558) 2018-01-14 19:32:41 +01:00
László Monda c7baa00720 Add get-uptime.js 2018-01-14 18:33:14 +01:00
László Monda 5cdf2282f8 Add {get,set}-i2c-baud-rate.js 2018-01-14 18:15:50 +01:00
László Monda 89221faf60 Add set-i2c-baud-rate.js 2018-01-14 00:45:51 +01:00
László Monda 3b70c84c61 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2018-01-13 19:33:28 +01:00
László Monda 5b1f4cb584 On the mouse speed section of the key action popover remove the bottom sentence and slightly rephrase the top sentence. 2018-01-13 19:30:08 +01:00
Mikko Lakomaa 3ee6c680a1 Agent menu (#540)
* Add generate version module script

* Remove Fork me on GitHub banner

* Add app-version.ts

* Revert "Add app-version.ts"

This reverts commit fe1a37e631.

* Add app-version.ts

* Add agent icon class

* Move settings component under agent folder

* Add AboutComponent

* Add agent routes

* Add index.ts for agent folder

* Fix agent folder imports in shared module

* Add agent menu to side menu, with Settings and About pages under it

* Fix agent icon alignment in side menu

* Simplify About page

* Make Agent menu 0 level in side menu

* Remove bottom Settings menu

* Fix Agent menu closing if My UHK is closed in side menu

* Fix version text alignment in auto update settings

* Remove github fork ribbon styles

* use package.json instead of app-version.ts

* fix OpenUrlInNewWindow naming

* fix lint request

* fix: firmware download url calculation
2018-01-13 17:10:21 +01:00
László Monda fdcf64d5c6 Only display minutes in the I2C error logger script. 2018-01-13 00:06:18 +01:00
László Monda 6c327ee414 Add I2C logger script. 2018-01-11 02:57:49 +01:00
László Monda b6bdd1486c Make update-module-firmware.js more robust and able to recover bricked modules (including the left half) by utilizing the newly added wait-for-kboot-idle.js 2018-01-10 03:15:19 +01:00
László Monda bd5be98d99 Restore wdi-simple.exe and 50-uhk60-rules.cmd just in case. 2018-01-08 06:13:37 +01:00
László Monda 802e6a4649 Update README.md 2018-01-08 06:03:58 +01:00
László Monda ae11c01725 Tidy up else clauses based on our coding standards. 2018-01-08 05:41:36 +01:00
Róbert Kiss f0139c55ee feat(user-config): Upload user configuration from json/bin file (#545)
* feat(user-config): Upload user configuration from json/bin file

* fix error message

* remove file extension filter

* apply user config after loaded from file

* add file filter

* remove file filter
2018-01-08 05:29:31 +01:00
László Monda b3f2e3451e Update README.md 2018-01-07 21:30:03 +01:00
Róbert Kiss 906beaac0e Update README.md (#548) 2018-01-07 21:27:07 +01:00
Andrew Kraut 46f855d1db Update readme (#547)
* Fix typos

* Update build instructions
2018-01-07 19:56:24 +01:00
László Monda 5341d953ff Fix statusCodesToStrings map. 2018-01-07 05:21:08 +01:00
László Monda bd9a2a0eeb Make get-slave-i2c-errors.js display slave names and I2C error names. 2018-01-06 21:29:14 +01:00
László Monda 4c10954721 Add script which reads I2C errors. 2018-01-05 03:26:26 +01:00
Róbert Kiss bbce1e0e0f fix(user-config): Validate device, keymap, and macro names (#543)
* fix(user-config): Validate device, keymap, and macro names

* fix device name renaming
2018-01-03 21:06:08 +01:00
László Monda 13f064229f Add keyAssigmentOrder array to uhk60-right/device.json 2018-01-02 04:05:26 +01:00
László Monda d3295c5666 Bump package.json and changelog to version 1.0.4 2017-12-30 15:29:02 +01:00
László Monda 216793bbb8 Add get-{left,right}-firmware-version.js 2017-12-29 13:34:49 +01:00
László Monda 558c8b0dbf Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2017-12-29 13:24:26 +01:00
László Monda e3c65f77df Rename getProperty to getDeviceProperty and getModuleProperties to getModuleProperty. 2017-12-29 13:23:58 +01:00
László Monda 227f8f0d2c Update package-lock.json files. 2017-12-29 13:23:32 +01:00
Mikko Lakomaa 7e0bc39de1 Mouse speed UI (#537)
* Add SliderProps interface to SliderWrapperComponent

* Implement mouse speed page

* Remove duplicate DefaultUserConfigurationService from shared module

* Add Reset speeds to default button

* Move reset button to bottom of mouse speed page

* Change mouse move slider step to 25

* Add label and tooltip handling to SliderWrapperComponent

* Use altered SliderWrapperComponent in mouse speed page

* Use altered SliderWrapperComponent in LED brightness page

* Move Reset mouse speeds confirmation popover to above button

* Add reset mouse speed settings action and effect

* Use ResetMouseSpeedSettingsAction in mouse speed page to reset settings

* Remove unused import
2017-12-29 13:07:01 +01:00
Spencer Owen c4d3648f73 Invert scroll on mac (#536) 2017-12-28 13:50:11 +01:00
László Monda 547ab738c2 Update package.json and changelog to version 1.0.3 2017-12-28 01:31:38 +01:00
László Monda 3de9e9aa84 Downgrade to firmware 8.0.0 because the left I2C watchdog of firmware 8.0.1 is not proven yet and might make things worse. 2017-12-28 01:09:01 +01:00
László Monda 01ac4c1e8b Note that macro playback is not implemented yet. 2017-12-27 23:30:08 +01:00
László Monda a0c8849f13 Comment out the add keymap button because the add keymap page is practically useless now. It'll be reimplemented. 2017-12-27 23:06:58 +01:00
László Monda 2a3dfcb0d0 Improve firmware update messages. 2017-12-27 22:47:53 +01:00
László Monda 2b3462c33f Display retry firmware update messages with regular color because they're not errors. 2017-12-27 22:38:07 +01:00
László Monda a0b838b2e9 Remove the secondary scroll bar that appears on the LED brightness page. 2017-12-27 20:43:25 +01:00
Mikko Lakomaa 90f56c350e LED brightness UI (#520)
* Add nouislider

* Add LEDBrightnessComponent

* Move LEDBrightnessComponent to correct folder

* Add LED brightness page to side menu and device routes

* Add LEDBrightnessComponent to device index file

* Add LEDBrightnessComponent and NouisliderModule to shared module

* Remove ngModelChange from LEDBrightnessComponent until onChange is implemented

* Fix stylelint issue in led brightness component

* Add nouislider files to webpack.config.js

* Add adjusting LED brightness sliders with arrow keys

* Various tweaks to LEDBrightnessComponent

* Fix linting issues in LEDBrightnessComponent

* Allow "::ng-deep" pseudo element in stylelint config

* Add reading LED brightness settings from user configuration

* led-brightness save

* Move slider to its own wrapper component, add debounce for slider change events

* Small fixes to imports and exports of SliderWrapperComponent

* Fix slide component making change event when initial value is set

* Export SliderPips interface

* Fix LED Brightness slider pips

* Add support for value unit in SliderWrapperComponent

* Add a bit of space before LED brightness sliders so the slider handle doesn't go beyond the page in the min position

* Implement onDestroy, fix slider pip values and imports in LEDBrightnessComponent

* Fix imports, implement onDestroy in SliderWrapperComponent

* Move fix for slider pip value style to global styles file

* Reorder stylelint rules
2017-12-27 20:10:55 +01:00
József Farkas 5ceca41e0f feat(renderer): show icon when possible even if the keystroke action has modifier (#533)
Closes #513
2017-12-26 23:23:32 +01:00
László Monda 721a4dc6e7 Bump Agent version to 1.0.2 and update changelog. 2017-12-25 23:55:23 +01:00
László Monda c9f03b4e57 Reference firmware 8.0.1 and don't include the moduleProtocolVersion field because it's firmware-related, not Agent-related. 2017-12-25 23:39:27 +01:00
László Monda bbb6839f7e Fix Linux blhost path. 2017-12-25 21:48:41 +01:00
László Monda dd973c80ea Add install-win-driver-*.bat 2017-12-24 03:56:13 +01:00
László Monda 48574a121a Move zadic-*.exe to packages/zadic 2017-12-24 03:35:13 +01:00
László Monda 8bc2462589 Reluctantly, add back zadic as it's needed to install Windows drivers for blhost to update the firmware on Windows. 2017-12-24 03:12:49 +01:00
László Monda 975ab8a5e9 Update README.md 2017-12-23 19:24:13 +01:00
László Monda f0a54768d4 Clarify the difference between the two builds. 2017-12-23 19:20:26 +01:00
Róbert Kiss 0b69d01a0d style: add missing semicolon (#526)
* fix(updater): check updater error is exists or not

* set default error message

* style: add missing semicolon

* style: add missing semicolon
2017-12-22 21:38:44 +01:00
László Monda 838a92836c Update changelog. 2017-12-22 20:06:44 +01:00
Róbert Kiss 500ccc296b fix(device): use tmp path to run setup-rules.sh (#523) 2017-12-22 19:58:54 +01:00
Róbert Kiss 8bb9f7f839 fix(updater): handle undefined error when updater not provide error content (#524)
* fix(updater): check updater error is exists or not

* set default error message
2017-12-22 19:50:31 +01:00
László Monda 5d1cc9202b Bump version to 1.0.1 and update changelog. 2017-12-21 21:21:06 +01:00
Róbert Kiss c11658f1fc fix(device): check privilege on Linux (#519)
* fix(device): check privilege on Linux

* device connected if also have permission

* fix rules sh path

* refactor permission detection

* fic hasPermission condition

* fix return value
2017-12-21 20:33:40 +01:00
László Monda 969c36561b Fix script name. 2017-12-15 04:33:10 +01:00
László Monda 04904aca5d Merge branch 'auto-write-config' 2017-12-15 04:27:18 +01:00
László Monda ef0b0aa4ba Add mass-updater script. 2017-12-15 04:25:28 +01:00
László Monda 3967593c9c Add get-module-state.js and the relevant device command id. 2017-12-15 02:58:51 +01:00
László Monda b8be1c965b Fix typo: blink-led-pwm-brithness.js -> blink-led-pwm-brightness.js 2017-12-15 02:49:36 +01:00
Róbert Kiss b32c93f0f8 feat(agent): automatically write user configuration after app started (#516)
* auto write userconfig

* fix load success action

* exit from app

* add electron:auto-write-config script
2017-12-14 23:36:43 +01:00
Róbert Kiss 711d3c0690 add electron:auto-write-config script 2017-12-14 23:22:13 +01:00
Róbert Kiss 42b4465230 exit from app 2017-12-14 23:19:34 +01:00
László Monda e8a1814d89 Reset changelog now the 1.0.0 has been released. 2017-12-14 23:02:11 +01:00
Róbert Kiss 2bf7d545a2 fix load success action 2017-12-14 22:50:24 +01:00
Róbert Kiss d09c46af42 Merge branch 'master' into auto-write-config 2017-12-14 22:01:12 +01:00
Róbert Kiss d57ba81d10 auto write userconfig 2017-12-14 21:59:44 +01:00
László Monda 9c46c6a348 Rename dataModelVersion fields to userConfigVersion. Update to firmware 7.0.0 2017-12-14 21:56:46 +01:00
László Monda 3e7a0ed81a Query the combined ConfigSizes device property. Remove the deprecated HardwareConfigSize and UserConfigSize device properties. 2017-12-14 19:40:03 +01:00
László Monda cac74c7c5a Add update-firmwares-and-configs.js and make update-all-firmwares.js apply and save the config into the EEPROM. 2017-12-14 02:31:01 +01:00
László Monda 9c66ea058b Add the -u, or --overwrite-user-config argument to update-all-firmwares.js and make write-config.js able to read a specified config file. 2017-12-14 01:12:46 +01:00
László Monda 1be8d20d5f Fix the name of the arm-specific directory of blhost. 2017-12-13 14:35:40 +01:00
László Monda f8f1747ec9 Add the arm version of blhost and make getBlhostCmd() return architecture-specific blhost versions. 2017-12-13 14:32:21 +01:00
László Monda ccaf64612e Merge branch 'finalize-usb-protocol' 2017-12-13 02:59:52 +01:00
László Monda 622b19045a Make write-hca.js work. 2017-12-13 02:56:08 +01:00
László Monda 2702a74035 Finalize usb protocol (#515)
* Change UsbCommandId_SetTestLed from 0x02 to 0x14

* Change UsbCommandId_JumpToModuleBootloader from 0x12 to 0x02.

* Change UsbCommandId_SendKbootCommandToModule from 0x13 to 0x03.

* Replace UsbCommandId_ReadHardwareConfig and UsbCommandId_ReadUserConfig with UsbCommandId_ReadConfig.

* Change UsbCommandId_WriteHardwareConfig and UsbCommandId_WriteUserConfig to 0x05 and 0x06.

* Change UsbCommandId_ApplyConfig to 0x07.

* Change the arguments of UsbCommandId_LaunchEepromTransfer and its id to 0x08.

* Change the value of UsbCommandId_{GetDeviceState,SetTestLed,GetDebugBuffer,GetAdcValue,SetLedPwmBrightness}.

* Use firmware 6.0.0
2017-12-13 01:20:23 +01:00
László Monda 5b20f685e5 Use firmware 6.0.0 2017-12-12 18:50:29 +01:00
László Monda 2eb31603f1 Change the value of UsbCommandId_{GetDeviceState,SetTestLed,GetDebugBuffer,GetAdcValue,SetLedPwmBrightness}. 2017-12-12 18:49:40 +01:00
László Monda 6b60241180 Change the arguments of UsbCommandId_LaunchEepromTransfer and its id to 0x08. 2017-12-12 03:26:57 +01:00
László Monda c296e6f49b Change UsbCommandId_ApplyConfig to 0x07. 2017-12-12 02:15:57 +01:00
László Monda 8420c83ebf Change UsbCommandId_WriteHardwareConfig and UsbCommandId_WriteUserConfig to 0x05 and 0x06. 2017-12-12 02:02:26 +01:00
László Monda 88d92130d5 Replace UsbCommandId_ReadHardwareConfig and UsbCommandId_ReadUserConfig with UsbCommandId_ReadConfig. 2017-12-12 01:24:29 +01:00
László Monda 22c1fa641a Merge branch 'master' of github.com:UltimateHackingKeyboard/agent into finalize-usb-protocol 2017-12-12 00:15:15 +01:00
László Monda 0454dfd4d8 Change UsbCommandId_SendKbootCommandToModule from 0x13 to 0x03. 2017-12-11 22:16:28 +01:00
László Monda 27988f0e6b Change UsbCommandId_JumpToModuleBootloader from 0x12 to 0x02. 2017-12-11 21:46:06 +01:00
László Monda 32fc4b3527 Change UsbCommandId_SetTestLed from 0x02 to 0x14 2017-12-11 21:22:13 +01:00
László Monda 8e121d88ab Finalize the format of HardwareConfiguration. (#514) 2017-12-11 20:39:29 +01:00
László Monda 6659ef8eab Bump version to 1.4.3 2017-12-11 00:35:16 +01:00
László Monda 76ba24e0aa Bump version to 1.4.2 2017-12-10 22:57:33 +01:00
László Monda 6c60122c67 Fix jump to previous and next tab Mac shortcuts. Delete arrange tab Mac shortcuts. 2017-12-10 17:07:23 +01:00
László Monda 1bb56d2687 Fix the open tab and close tab Mac shortcuts. 2017-12-10 16:25:04 +01:00
László Monda 5a16355236 Fix Mac window switch and workspace switch shortcuts. 2017-12-10 16:16:12 +01:00
László Monda 3dea925d5e Replace Alt and Super keys on Mac keymaps. 2017-12-10 15:54:51 +01:00
László Monda fdf484d2fb Add Mac versions of the QWERTY, Colemak, and Dvorak keymaps. The actual Mac keymaps have yet to be macified. 2017-12-10 04:52:19 +01:00
László Monda a3a5a6ce79 Remove redundant wake and sleep key actions of keymaps. 2017-12-10 02:42:57 +01:00
László Monda 676ff63922 Add test keymap. 2017-12-10 02:30:26 +01:00
László Monda f3a8a97de7 Fix the order and id of the mouse and fn secondary roles. 2017-12-10 02:23:00 +01:00
László Monda a51a59c586 Add mouse scroll actions. Add right-handed mouse click actions. Add keymap switch actions. 2017-12-09 22:08:19 +01:00
László Monda e3906222ca Only keep the most popular layouts including QEWRTY, Colemak and Dvorak. 2017-12-09 21:29:54 +01:00
Róbert Kiss 40b72e8903 feat(scripts): Add write-userconfig (#511) 2017-12-09 20:37:14 +01:00
Róbert Kiss 2d416e7668 fix(device): use module import in uhk-usb (#509)
* fix(device): use module import in uhk-usb

* fix getTransferBuffers import
2017-12-09 18:02:39 +01:00
László Monda 55bd0148f4 Use firmware 5.0.1 2017-12-09 17:02:23 +01:00
Róbert Kiss 3de9181687 feat(device): Ensure serial the device communication (#508) 2017-12-09 16:11:03 +01:00
Róbert Kiss 19d7b8ebfe chore(release): 1.4.1 2017-12-05 22:29:02 +01:00
Róbert Kiss 75ab0e2977 test(user-config): fix unit tests (#506) 2017-12-05 22:27:27 +01:00
Róbert Kiss 777832068d chore(release): 1.4.0 2017-12-05 21:02:27 +01:00
László Monda f44202c0e7 Extract debug values to constants and compute USB interface callbacks per second. 2017-12-05 03:05:20 +01:00
László Monda 353c87d71a Make uhk.js non-executable. 2017-12-04 03:07:08 +01:00
László Monda fdef5ed580 Fix config size user config offsets. Restore getConfigSizeFromKeyboard() size if the read user config size is larger than it. Move pointerRole from keymaps to module configurations as pointerMode. Add angularShift, modLayerPointerFunction, fnLayerPointerFunction, and mouseLayerPointerFunction to module configurations. Reference firmware 5.0.0 2017-12-04 00:51:50 +01:00
László Monda 7537e5b823 Add a number of properties to the user config that are related to mou… (#501)
* Add a number of properties to the user config that are related to mouse movement, LED brightness, data model versioning, and double tap switch layer timeout. Update firmware related version numbers.

* use default config if parse loaded config from device failed

* add asserts to the new user config fields

* separate user and hardware config parser

* fix indent

* fix user-config size read
2017-12-02 23:55:43 +01:00
Róbert Kiss 58b1b9b1dc fix(device): fix IpcRenderer empty data messages (#503)
* fix(device): fix IpcRenderer empty data messages

If IpcRenderer send null / undefined data as argument then IpcMain parse
it as empty array and not a NULL object

* fix else line break
2017-12-02 22:40:54 +01:00
Róbert Kiss 95d1d7f8b5 chore: Upgrade node => 5.9.1 and npm => 5.6.0 (#502)
The npm upgrade maybe solve the cross-platform package-lock.json problem.
2017-12-02 13:31:34 +01:00
Róbert Kiss 13f2b65a7c fix(rendered): Double scrollbar 2017-11-30 00:09:03 +01:00
Róbert Kiss 297fd3be79 feat(device): flash device firmware from Agent (#499)
* add dataModelVersion, usbProtocolVersion, slaveProtocolVersion

* read the package.json at appstart

* flash firmware

* update firmware

* fix extra resource path

* fix import modules

* update lock files

* fix imports

* terminal window

* exclude tmp folder from git repo

* ok button

* auto scroll in xterm

* fix maxTry count calculation

* optimize logging

* optimize timeout

* readSync

* Add extra delay

* fix async call

* fix error message in log

* fix ok button disable state

* retry

* list devices

* close device after reenumeration

* retry snooze

* kboot maxtry 10

* retry 100

* remove deprecated toPayload ngrx helper

* flash firmware with custom file

* fix tslint
2017-11-27 22:12:43 +01:00
László Monda f608791a09 Expose JSON and binary device configuration exports as links. 2017-11-23 03:45:23 +01:00
László Monda c9feb49529 Add update-all-firmwares.js 2017-11-17 01:02:31 +01:00
Róbert Kiss 62c5e9d88a fix(keymap): Handle more than 35 same keymap abbreviation (#497) 2017-11-12 15:29:30 +01:00
Róbert Kiss 9e69098ad2 fix(keymap): Secondary role show 'None' value if not set (#496)
* fix(keymaps): Secondary role show 'None' value if not set

* style: move else in the same line with the close if }
2017-11-12 15:11:01 +01:00
László Monda 4aae62e3a7 Add timer field to the debug script. 2017-11-12 14:45:40 +01:00
László Monda dbbb3e6d0f List layer switchers before modifiers in the secondary role select2 list. 2017-11-11 16:43:10 +01:00
László Monda 1effc3c1dc Update variable names according to firmware variables. 2017-11-11 16:28:04 +01:00
László Monda a2fc30175d Dump individual debug values in an easy to read fashion. 2017-11-09 18:59:04 +01:00
László Monda 42e39375d1 Rename HardwareConfiguration.hardwareId to deviceId and set it to 1 by default. 2017-11-09 01:05:42 +01:00
László Monda fc7840aa24 Rename the module.json to device.json of the uhk60-right. 2017-11-09 01:01:34 +01:00
László Monda 5996ae14b0 Split id as deviceId and moduleId in module.json descriptor files. 2017-11-09 00:02:59 +01:00
László Monda 3f26aa68fb Rename USB scripts according to the recent USB command renames. 2017-11-08 23:19:21 +01:00
László Monda 4e8061eb63 Rename launchEepromTransfer to launchEepromTransferLegacy. 2017-11-08 23:15:47 +01:00
László Monda f9e1d022f2 Slightly tweak USB command names. 2017-11-08 23:13:03 +01:00
László Monda 6ba6ad543e Move the uhk60-right directory from modules to devices. 2017-11-08 22:52:03 +01:00
László Monda 66a30431d0 Move the separator line SVG into uhk60-right. 2017-11-08 22:42:27 +01:00
László Monda 04b43896c5 Make the firmware updater scripts take module slot parameters instead of I2C addresses. Rename scripts from *slave* to *module*. 2017-11-08 18:27:45 +01:00
László Monda 9a5862b57c Make update-slave-firmware expect a module slot name, too. 2017-11-08 03:47:51 +01:00
László Monda ac5d6ba32a Add firmware updater scripts from the firmware repo and the dependent blhost binaries. 2017-11-08 01:18:46 +01:00
László Monda ee85f666ae Delete deprecated scripts. 2017-11-08 00:42:32 +01:00
László Monda e7d8b619fd Regenerate icons. 2017-11-07 23:57:10 +01:00
László Monda 22f6d52a71 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2017-11-07 23:56:43 +01:00
László Monda ebdb0b114c Add icon generator script. 2017-11-07 23:56:28 +01:00
Róbert Kiss e61f6ef106 chore(release): 1.3.7 2017-11-07 23:26:06 +01:00
Róbert Kiss 30890fca0d ci: install yarn on travis osx 2017-11-07 23:25:40 +01:00
Róbert Kiss 555688f7d4 Revert "ci: try to build ARM7"
This reverts commit e842bae
2017-11-07 21:47:52 +01:00
Róbert Kiss d80de77b2f chore(release): 1.3.6 2017-11-07 21:28:20 +01:00
Róbert Kiss e842baefa8 ci: try to build ARM7 2017-11-07 21:26:35 +01:00
Róbert Kiss 8703664118 chore(release): 1.3.5 2017-11-07 18:26:43 +01:00
Róbert Kiss 915aefe8a3 revert: remove electron builder from package.json 2017-11-07 13:53:16 +01:00
Róbert Kiss 89b45de11a chore(release): 1.3.4 2017-11-06 23:25:19 +01:00
Róbert Kiss 40eb2ca9a2 ci: install electron-builder only when releasing 2017-11-06 23:24:27 +01:00
László Monda b3a38a5d6c Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2017-11-06 00:31:05 +01:00
László Monda 5252ec3702 Increment the argument of jumpToSlaveBootloader now that it's been changed from UHK module driver id to slot id. 2017-11-06 00:29:24 +01:00
Róbert Kiss b7cca0a082 chore(release): 1.3.3 2017-11-05 13:35:42 +01:00
Róbert Kiss e8f755af70 ci: use the same build dependencies than node-hid (#492) 2017-11-05 12:52:35 +01:00
Róbert Kiss e7d6913984 chore(release): 1.3.2 2017-11-04 23:42:41 +01:00
Róbert Kiss 8e0ab4f71c ci: Add g++-multilib to travis (#491) 2017-11-04 23:38:28 +01:00
László Monda a5c478d51c Remove the unused scripts section of package.json and make user-config-json-to-bin.ts slightly simpler. 2017-11-04 17:45:26 +01:00
Róbert Kiss 3313fad9e6 chore(release): 1.3.1 2017-11-04 17:40:33 +01:00
Róbert Kiss d9417eaa89 fix(config): Remove userConfigurationLength from json serialization (#490) 2017-11-04 17:38:04 +01:00
Róbert Kiss 78e27c3688 build: user-config-json-to-bin.ts runnable from other directory (#489)
* new setup

* make run able ts file from other directory

* do not build project
2017-11-04 17:26:34 +01:00
Róbert Kiss 8660a9ae50 chore(release): 1.3.0 2017-11-04 11:14:39 +01:00
Róbert Kiss ec4505cead chore: mark package as private 2017-11-04 11:14:30 +01:00
Róbert Kiss 47b589b3d8 build: stop travis if any script failed 2017-11-04 11:14:04 +01:00
László Monda 6ab7bd9298 Read bytes 1-2 instead of bytes 0-1 now that the firmare uses the status byte as expected. 2017-11-04 02:06:01 +01:00
László Monda a5ff1cd97d Tweak the label and description of the secondary role a bit. 2017-11-03 22:45:32 +01:00
László Monda 2ae7abe440 Utilize ts-node to run user-config-json-to-bin.ts. Remove the lint pre-commit hook because I couldn't commit with git. 2017-11-03 00:33:37 +01:00
Róbert Kiss ea700852bc fix(config): Add userConfigurationLength to the user-config.json 2017-11-02 23:58:47 +01:00
Róbert Kiss 217d78a85f chore: add lint precommit hook (#488) 2017-11-02 23:29:48 +01:00
Róbert Kiss f6ea327813 build(usb): run chmod u+x after build (#487) 2017-11-02 23:20:53 +01:00
Róbert Kiss 0c30eccaca feat(device): Read only filled user configuration and fix app close on mac (#486)
* feat(device): Save user configuration length

* feat(device): Read only filled user configuration from EEPROM

* fix(agent): Close device connections and quit from app on Mac
2017-11-02 23:06:53 +01:00
Róbert Kiss fe6cd68c55 build: upgrade nodejs => 8.9.0 (#485)
* build: upgrade nodejs => 8.9.0

* ci: remove npm upgrade from CI files
2017-11-02 21:22:43 +01:00
Róbert Kiss e394f8483e build: Add watch script to usb module 2017-11-02 20:20:14 +01:00
Róbert Kiss 009dd8e963 fix(usb): user-config-json-to-bin compile 2017-11-02 19:56:21 +01:00
László Monda 7ab55e9ac5 Move user-config-json-to-bin.ts to the usb package and use import instead of require. 2017-11-02 17:43:29 +01:00
László Monda 4ae432e91d Add JSON to bin configuration converter script. 2017-11-01 17:10:56 +01:00
László Monda 91eb4b3a50 Rename uhk60-{left,right}-half to uhk60-{left,right} 2017-10-31 22:05:32 +01:00
László Monda 3f78cc1340 Add script to test hidapi stability by using readSync() calls. 2017-10-31 20:08:33 +01:00
Róbert Kiss 5318b2a2e1 chore(release): 1.2.4 2017-10-30 20:36:07 +01:00
Róbert Kiss 1f634f98f3 fix(usb): remove extra first 0 from USB transfer data 2017-10-30 20:35:41 +01:00
László Monda 220999eeda Simplify slot names by removing the "-keyboard" part. 2017-10-30 02:11:43 +01:00
Róbert Kiss eac9341c99 chore(release): 1.2.3 2017-10-29 09:45:15 +01:00
Róbert Kiss d876203d27 ci: remove appveyor x64 platform entry 2017-10-29 09:45:08 +01:00
Róbert Kiss 2d1fcded0f chore(release): 1.2.2 2017-10-29 09:33:50 +01:00
Róbert Kiss 48567d420b build: fix node-hid version number in deploy package.json 2017-10-29 09:33:33 +01:00
Róbert Kiss 90ab458d5f chore(release): 1.2.1 2017-10-29 09:30:13 +01:00
Róbert Kiss b3475992b1 Merge branch 'master' of https://github.com/UltimateHackingKeyboard/agent 2017-10-29 09:25:11 +01:00
Róbert Kiss 3f2ded819e chore(release): 1.2.0 (#481) 2017-10-29 00:59:55 +02:00
Róbert Kiss 115544c62c chore(release): 1.2.0 2017-10-29 00:53:30 +02:00
Róbert Kiss 053352467d build: platform specific builds (#480)
* build: upgrade electron-builder and updater

* build: pack or publish managed by ENV

* fix typo

* ci: appveyor y64 build

* style: fix indent in release.js

* build: upgrade package version

* build: upgrade node-hid => 0.5.7

* build: upgrade node-hid => 0.5.7

* build: setup new release script

* build: setup new release script
2017-10-29 00:52:09 +02:00
László Monda bcf9607ae3 Make macro header texts a bit more verbose. 2017-10-29 00:39:35 +02:00
László Monda 5cdd317253 Write "*wards" instead of left, right, down, and up. 2017-10-29 00:39:00 +02:00
László Monda dc0c2862b3 Reduce the number of delays presets and make "seconds" non-bold. 2017-10-29 00:38:20 +02:00
László Monda d1c8ef94fc Add ISO key to all keymaps. 2017-10-29 00:37:53 +02:00
Róbert Kiss cdc4a169de feat(config): Add deviceName to the user config (#474)
* add device name to configuration

* feat(config): Rename user configuration

* style: fix tslint error

* test: Fix unit tests

* test: Add UserConfiguration device name test

* set device name if faild the user-config read from device

* feat(device): Remove the first 0 from USB[W] dump
2017-10-28 20:16:59 +02:00
Róbert Kiss 9885439b10 feat(ui): macro ui improvement (#473)
* Remove the "Input the text you want to type with this macro action." sentence from the type text macro action.

* Move pointer and Scroll enhancement

* remove the extra vertical space above the mouse buttons

* macro delay enhancement

* not allow user select on a few elements

* fill the macro, keymap name the all space in the header
2017-10-28 16:54:08 +02:00
Róbert Kiss bd49e26978 build: upgrade node to 8.8.1 (#471)
* build: upgrade to nodejs 8.8.1 and npm 5.5.1

* ci: upgrade the npm to the latest version in ci files

* build: remove duplication from clean script
2017-10-27 00:44:55 +02:00
Róbert Kiss 2f459a88c6 feat(agent): remove routing animation from keymaps (#468)
* feat(agent): remove routing animation from keymaps

* fix(agent): stylelint warning

* fix(web): Align center the keyboard in init state
2017-10-26 23:49:30 +02:00
Róbert Kiss 6c6e2af047 refactor: Change name of actions (#470)
* style: shorter import in key-macro-action.ts

* refactor: rename 'press' macro key action to 'tap'

* refactor: rename 'hold' macro key action to 'press'

* refactor: rename 'press' macro mouse action to 'click'

* style: fix stylelint
2017-10-26 23:25:19 +02:00
László Monda 133f8be370 Rename send-kboot-command.js to send-kboot-command-to-slave.js 2017-10-23 22:23:00 +02:00
László Monda 7661700457 Rename jump-to-bootloader.js to reenumerate.js and make it able to reenumerate as any UHK USB product ID. 2017-10-23 16:48:09 +02:00
László Monda 1b22a2e739 Rename send-kboot-reset.js to send-kboot-command.js and generalize it by allowing various KBOOT commands to be sent. 2017-10-23 01:13:36 +02:00
László Monda 1a0fa5b5ba Add send-kboot-reset.js and add the new USB command ID to uhk.js 2017-10-22 02:13:08 +02:00
László Monda ce91d88448 Don't dump transfered payloads in jump-to-{slave-}bootloader.js 2017-10-21 03:09:47 +02:00
László Monda 7c7fde6d30 Don't create a HID object out of the bootloader device because that makes blhost unable to connect to it for some reason even if jump-to-bootloader.js calls device.close() before it exits. 2017-10-20 00:10:08 +02:00
Róbert Kiss 277e3d2ded build: upgrade node to 8.7.0 (#469) 2017-10-19 21:51:05 +02:00
László Monda e8f88b37f3 Exchange the Configuration and Mouse speed menu items. 2017-10-18 23:29:54 +02:00
Attila Csanyi 6fb8e56963 Add captured press keystroke for macros (closes #324) (#427)
* update npm lock file (#425)

* feat(capture): make capture keystroke button reusable as make itself render a link or button (closes #324)

* review: re-style bootstrap link button template of capture component like a button

* review: use same bootstrap btn-link styles for "Add macro action" as in case of "Add captured keystroke"
2017-10-18 22:40:09 +02:00
Róbert Kiss 8c652a427f feat(agent): change header styles (#464) 2017-10-18 21:34:29 +02:00
Róbert Kiss 3ffaf918cd refactor(agent): Rename 'LongKeypressAction' to 'SecondaryRoleAction' (#462)
* refactor(agent): Rename 'LongKeypressAction' to 'SecondaryRoleAction'

* build: Change the build order of the modules

* fix(user-config): Fix hasSecondaryRoleAction() calculation

* fix(user-config): fix stylelint warnings
2017-10-18 21:16:56 +02:00
László Monda 641248c9e6 Remove the now redundant examples directory. 2017-10-18 15:13:48 +02:00
László Monda 2630007f30 Change Firmware page title to Mouse speed. 2017-10-18 13:56:08 +02:00
László Monda c579f2ce3e Leave more space above and below the explanatory text of the device configuration screen. 2017-10-18 13:52:06 +02:00
László Monda a7e7d54054 Leave less space below the toplevel device node of the side menu. 2017-10-18 03:23:39 +02:00
Róbert Kiss ab88d8a2e7 feat(agent): Add 'Device' menu and submenus (#461) 2017-10-18 01:28:02 +02:00
Róbert Kiss 041d4debb6 fix(app): Rename the title property of the uhk-message component (#460)
Renaming eliminate the default behaviour of the title attribute of the
HTML elements.
2017-10-18 01:19:40 +02:00
László Monda f7cdbbb5e0 Make jump-to-bootloader.js able to reenumerate the UHK as BusPal proxy. 2017-10-17 01:27:01 +02:00
László Monda 75e3995276 Add jump-to-slave-bootloader.js 2017-10-17 01:10:36 +02:00
László Monda 05b3402765 Send bootloader timeout to the bootloader via USB. 2017-10-16 23:31:22 +02:00
László Monda 2676e0c671 Add explanatory text for the device configuration. Remove the "Save device binary configuration" button. Add "Upload device configuration" button that doesn't work yet. 2017-10-15 23:03:34 +02:00
László Monda f2250b699c Rearrange user configuration related buttons and update the description of the reset configuration button. 2017-10-15 19:17:21 +02:00
László Monda bff97f02d7 Change "Loading Agent..." to "Loading keyboard configuration..." 2017-10-15 16:05:47 +02:00
Róbert Kiss 69101d73a8 build: upgrade @angular => 4.4.5 (#451) 2017-10-15 14:52:24 +02:00
László Monda 5764189945 Delete the deprecated readMergeSensor USB command and the related read-merge-sensor.js test script. 2017-10-15 02:58:08 +02:00
László Monda 2896c9c60e Display isEepromBusy, areHalvesMerged, and isLeftHalfConnected states. 2017-10-15 02:56:45 +02:00
László Monda 4c55ca80ca Add separator line that will be displayed between the keyboard halves. 2017-10-15 02:12:50 +02:00
Róbert Kiss a4056a8b8b feat(device): Add confirmation question before reset the configuration (#449)
* feat(device): Add confirmation question before reset the configuration

* feat(device): text change

* style: fix ts-lint error
2017-10-14 16:49:13 +02:00
Róbert Kiss 6b46c85ca6 feat(device): Add save config buttons to the Device settings page (#447)
* feat(device): Add save config buttons to the Device settings page

* feat(device): Set danger style to the reset user-config buttone
2017-10-14 16:04:50 +02:00
Róbert Kiss 737897b40e feat(agent): Add loading screen (#444)
* feat(uhk-message): Add spin animation

* feat(agent): Add loading page

* fix device connected / disconnected events
2017-10-14 01:22:44 +02:00
Róbert Kiss 01b07a3ab7 feat(device): Wait for read user/hardware config until device is ready (#443)
* feat(device): Wait for read user/hardware config until device is ready

* ci: remove uhk-web test runners until not I will fix the chome on mac
2017-10-14 00:55:16 +02:00
Róbert Kiss 235034bc68 ci: fix the chrome setup on travis mac (#445)
* ci: fix chrome config on mac

* ci: fix chrome config on mac

* ci: fix chrome config on mac
2017-10-14 00:33:05 +02:00
Róbert Kiss 7baf9ad009 fix(user-config): Layer switcher key behaviour on non-base layers (#440)
* refactor(user-config): Optimize imports

* feat(user-config): Clone SwitchLayerAction to destination layer

* fix(user-config): Fix Keymap SwitchLayerAction normalization

* test(user-config): Remove spy callThrough

* build: Add uhk-common test runner

* build: delete test serialization files

* fix(user-config): Add missing "type": "basic" properties to the user-config.json

* test(user-config): Add KeyMacroAction tests

* fix(user-config): Delete SwitchLayerAction from non destination layer

* fix(user-config): Keymap normalize delete SwitchLayerActions from non base layers

* ci: turn of uhk-web tests

* ci: turn off karma watch mode in uhk-web test
2017-10-13 12:25:57 +02:00
Róbert Kiss 46b97a9b62 feat(user-config): Add ISO key scancode (#441)
close: #437
2017-10-11 22:22:34 +02:00
László Monda 421f406cae Fix the layer switcher keys of all keymaps. 2017-10-10 01:51:40 +02:00
Róbert Kiss 0e5d6d1a25 refactor(device): Rename UserConfigSize => MaxUserConfigSize (#436)
Rename SystemPropertyIds.UserConfigSize => SystemPropertyIds.MaxUserConfigSize because it better describe which date will return from device
2017-10-09 23:20:06 +02:00
József Farkas 50e0b64f6e Upgrade to ngrx v4 (#378)
* Update ngrx to v4

* package.json files

* release: Remove zadic references from release script

* fix(user-config): Fix user-config loading

* build: Lock package dependencies

* build: fix app version

* ci: remove build:test step

* fix(user-config): Revert switch-keymap-action modifications

* test(user-config): xit keystroke-action test

* fix(user-config): Fix user config loading

* fix(user-config): Fix user config loading
2017-10-08 18:31:16 +02:00
Róbert Kiss ba1fff788d feat(device): Reset user configuration on device (#435) 2017-10-08 00:23:46 +02:00
Róbert Kiss 23af522a48 fix(user-config): Fix user configuration savings (#433)
* test(user-config): Fix saveAs functionality

* feat(user-config): Add 2 space indent when save user-config to json file

* refactor(user-config): Move user config savings into user config effect

* build: Remove unused package
2017-10-07 16:19:32 +02:00
Róbert Kiss 35c0d98cd2 test(serializer): Add KeystrokeAction tests (#430)
* test: add basis of the unit testing of the uhk-common package

* test(serializer): Add KeystrokeAction tests

* fix(serializer): Fix KeystrokeAction scancode mapping

* test(serializer): Add NoneAction test cases

* test(serializer): Add MouseAction test cases

* test(serializer): Add PlayMacroAction test cases

* test(serializer): Add SwitchKeymapAction test cases

* test(serializer): Add UserConfiguration test cases

fix KeyAction mapping

* test(serializer): Add SwitchLayerAction test cases
2017-10-06 22:24:33 +02:00
László Monda 85bc5b94e1 Add read-keyboard-state.js 2017-10-05 21:53:32 +02:00
László Monda 15a56659b6 Add script. 2017-10-05 02:46:49 +02:00
Attila Csanyi 0ad261e7fd update npm lock file (#425) (#426) 2017-09-27 22:14:27 +02:00
Róbert Kiss 9294bede50 feat(config): Read / write hardware configuration area (#423)
* add write-hca.js

* refactor: Move config serializer into the uhk-common package

* refactor: Move getTransferBuffers into the uhk-usb package

* refactor: delete obsoleted classes

* build: add uhk-usb build command

* refactor: move eeprom transfer to uhk-usb package

* fix: Fix write-hca.js

* feat: load hardware config from the device and

* style: fix ts lint errors

* build: fix rxjs dependency resolve

* test: Add jasmine unit test framework to the tet serializer

* fix(user-config): A "type": "basic", properties to the "keystroke" action types

* feat(usb): set chmod+x on write-hca.js

* feat(usb): Create USB logger

* style: Fix type

* build: Add chalk to dependencies.

Chalk will colorize the output
2017-09-26 16:57:27 +00:00
László Monda 1122784bdb Fix script. 2017-09-19 01:08:53 +02:00
László Monda e99fb08cc2 Add Dvorak, Colemak, Workman, One-handed, Keyboard+mouse, and egghead.io keymaps. 2017-09-17 23:50:17 +02:00
Róbert Kiss 8f85254b5c fix(tooltip): Uncomment JQuery tooltip codes (#420) 2017-09-17 13:26:11 +00:00
Róbert Kiss 73ce1dfa67 fix(keymap): Should not automatically capitalize keymap name (#421) 2017-09-17 12:51:14 +00:00
Róbert Kiss 96e968729d feat(device): Read user config from eeprom (#413)
* feat(device): Read user config from eeprom

* read data from eeprom

* fix user config serialization

* fix device connected detection

* not allow override default config is eeprom is empty

* add error handling to eeprom parsing

* colorize log output

* add USB[T] feature

* add class name to USB[T] log

* remove redundant error log msg

* Add USB[T] to Apply user config
2017-09-17 12:45:20 +00:00
Róbert Kiss d621b1e5e6 feat(device): Write user configuration into the eeprom (#411)
* feat(device): Write user configuration into the eeprom

* when save user config settings wait until is not keyboard busy
2017-09-14 22:13:00 +00:00
Róbert Kiss 901a5eb5d1 refactor: Add UhkHidDevice wrapper that unified the USB communication (#414)
* refactor: Add UhkHidDevice wrapper that unified the USB communication

* fix(log): Hack Replace console.debug to console.log
2017-09-13 22:58:41 +00:00
Róbert Kiss 8d7269a998 feat(device): Add 'Save to keyboard' button (#402)
* feat(device): Add 'Save to keyboard' button

Created a 'Progress Button' that have 2 state in progress or not.
Able to set different text for different state:
- baseText for normal state
- progressText for in progress state
close: #377

* fix 'Save to keyboard' button visibility in web version

* remove success notification when save to keyboard success

* feat(notifier): Turn off auto hide of the notifier

* feat(device): Show saved state of 'Save to keyboard button'

* style: Format import in app.component.ts

* feat(device): Auto hide 'Save to Keyboard' button

* fix(device): Fix saving animation

* fix(device): Fix saving animation

* fix(device): Fix tslint
2017-09-10 23:22:54 +00:00
Attila Csanyi c135aed7c9 Issue 388 - Device node (#397)
* Issue 388 - Device node (first version before review) (#388)

* fix: style linting issues

* review: revert the same padding size of the level 1 components on the sidebar

* feat(uhk-icon): Create uhk-icon set and fix USB device icon visibility in electron

* style: Use semicolon in js files
2017-09-10 22:56:03 +02:00
Attila Csanyi accdf5facd Remove excess space above the UHK (#409)
* Issue 323 - Remove excess space above the UHK (#323)

* revert back specific width of keyboard slider to be able to visible in the electron app

* fix: showing the whole keyboard on big screen

* fix: satisfy very small screens (no overflow of other keyboard left side) and increase the place where keyboard can fit (tested near 2000px width)

* Revert "fix: satisfy very small screens (no overflow of other keyboard left side) and increase the place where keyboard can fit (tested near 2000px width)"

This reverts commit 376604d24a.
2017-09-09 01:03:56 +02:00
László Monda 90a689395c Add apt-get install. 2017-09-07 10:33:55 +02:00
László Monda 88a04454ae Ignore HID exception which gets thrown when the bootloader is already up. Remove noisy messages. 2017-09-06 21:57:46 +02:00
László Monda d7e820bc1f Add comment regarding the commented out workaround for node-hid issue 187. 2017-09-06 21:37:46 +02:00
László Monda d8bf6a70ac Make code more readable. Remove the writeLedDriver that doesn't do anything anymore. 2017-09-06 21:35:16 +02:00
László Monda 86868274d6 Update README.md 2017-09-06 20:11:54 +02:00
Róbert Kiss 30c74c06d3 refactor(usb): Use hid-api instead of lib-usb (#404)
* refactor(usb): Rewrite jump-to-bootloder to node-hid

* refactor(usb): Rewrite the whole usb packages to HID-API

* refactor(usb): Deleted not valid usb command files

* refactor(usb): Deleted not supported usb commands

* Remove obsolete script.

* Remove obsolete script.

* Fix script.

* Fix script.

* No need to assign the silent property because it has been removed.

* This workaround may work on other platforms, but it certainly doesn't work on Linux. It makes some scripts not work, so I'm commenting it out.

* Fix bootloader VID and PID.
2017-09-06 14:32:58 +02:00
László Monda 3cbd3bb5ea Add firmware upgrade script for the left half. 2017-08-30 22:06:16 +02:00
László Monda c954c6bf51 Fix filename. 2017-08-30 20:54:53 +02:00
László Monda 6b2751a7c7 Add script. 2017-08-30 20:47:09 +02:00
Attila Csanyi c73ecdbde9 Issue - 141 - Validate macro actions (#141) (#395)
* Issue - 141 - Validate macro actions (#141)

* review: refactor validation logic based on each macro tab component emitted event

* review: mouse key macro invalid if any of the X, Y fields are empty

* review: apply review comments for shorthand if conditions and imports
2017-08-29 00:52:40 +02:00
Róbert Kiss ee93466a08 build: Fix reflection and minification conflict (#399)
The minification change the class name so constructor.name not give back the correct class name.
Introduced getName() method in KeyAction and MacroAction Abstract class
2017-08-27 02:38:55 +02:00
Róbert Kiss be3e116130 build: Configure AOT (#394)
* build: Configure AOT

* build: Fix appveyor ENV settings
2017-08-26 00:56:28 +02:00
Róbert Kiss 015d110c2b fix(keymap): Hide horizontal scrollbar (#392)
close #391
2017-08-20 19:22:22 +02:00
Róbert Kiss b2466f01aa fix(keymap): Add new keymap scrolling (#390)
close #389
2017-08-20 15:37:06 +02:00
Róbert Kiss 0f558e4132 refactore: create feature modules (#387)
* add @angular/cli to the project

* increase nodejs version -> 8.2.1

* add lerna

* merge web and shared module

* move electron module into packages as uhk-agent

Electron agent functionality is not working

* delete symlinker

* convert private properties to public of component if used in html

* revert uhk-message.component

* fix component path

* fix the correct name of the uhk-message.component.scss

* building web and electron module

* delete uhk-renderer package

* handle device connect disconnect state

* add privilege detection

* fix set privilege functionality

* turn back download keymap functionality

* add bootstrap, select2 js and fix null pointer exception

* turn back upload data to keyboard

* fix send keymap

* fix test-serializer

* add missing package.json

* merging

* fix appveyor build

* fix linting

* turn back electron storage service

* commit the missing electron-datastorage-repository

* update node to 8.3.0 in .nvmrc and log node version in appveyor build

* set exact version number in appveyor build

* vertical align privilege and missing device components

* set back node version to 8 in appveyor

* move node-usb dependency from usb dir to root

maybe it is fix the appveyor build

* revert usb to root

* fix electron builder script

* fix electron builder script

* turn off electron devtools

* remove CTRL+U functionality

* fix CTRL+o

* fix lint error

* turnoff store freeze

* start process when got `Error: EPERM: operation not permitted` error

* move files from root usb dir -> packages/usb
2017-08-19 20:02:17 +02:00
László Monda 97770f67c0 Add USB stick icon. 2017-08-16 14:44:50 +02:00
László Monda eb16c422e5 Fix script. 2017-08-13 14:22:04 +02:00
J??zsef Farkas a2baedd53d Update dependencies
angular 4.3.4
2017-08-12 18:14:08 +02:00
József Farkas 4193cd0d1e Save config on shortcuts (#386)
Closes #383
2017-08-12 02:23:53 +02:00
József Farkas 49ec48c9e9 Fixing invalid keymap list propagation (#384)
Fixes #382
2017-08-10 23:58:06 +02:00
József Farkas 2735edb631 Restore renaming keymap call (#381)
Fixes #379
2017-08-10 01:20:03 +02:00
László Monda 0259ff53fc Add read-debug-info.js 2017-08-07 03:03:07 +02:00
László Monda f6e67d0e73 Add EEPROM stress testing scripts. 2017-08-07 03:02:21 +02:00
László Monda 941ff7053b Add scripts to print and log I2C hangs. 2017-08-07 02:46:10 +02:00
László Monda 880aa06ad5 Add wait-until-i2c-dies.js 2017-08-07 02:30:17 +02:00
László Monda b12a891ba8 Rename readMergeSensor() to readAdc() 2017-08-07 02:14:14 +02:00
József Farkas 50aac5835d Store keymapId instead of abbreviation in SwitchKeymapAction (#376)
* Store keymapId instead of abbreviation in SwitchKeymapAction

* Pass down the user configuration instead of macros
2017-07-30 21:20:16 +02:00
Róbert Kiss ee248e9c93 fix(keymap): Fix 'Capture keystroke' button in FF (#375)
Close #374
2017-07-25 21:00:25 +02:00
Mikko Lakomaa eac588c42c Fix key capture on Firefox (#373)
* Add tabindex attribute to svg-keyboard-key to allow focusing the key in Firefox

* Fix typo in svg-keyboard-key.component onKeyUp method
2017-07-25 20:59:00 +02:00
Róbert Kiss 817daafd18 feat: Set no wrap on Delete Keymap and Delete Macro icons (#371)
close #369
2017-07-25 00:38:43 +02:00
László Monda c17bf0fd3d Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2017-07-25 00:31:35 +02:00
Róbert Kiss ec085d574c ci: Travis do not use cache (#372) 2017-07-25 00:30:35 +02:00
László Monda a52e0c81c5 Add read-config.js and add new USB command ids and receive callback to uhk.js 2017-07-25 00:30:34 +02:00
Róbert Kiss 803ae8bb8f build: update dev dependencies (#370) 2017-07-24 22:17:25 +02:00
Róbert Kiss aad0c155dd fix(keymap): Change keymap name and abbr algorithm (#365)
* feat(keymap): Change keymap name and abbr algorithm

Close #363

* feat(keymap): When rename a keymap or macro and the new name is exists do nothing
2017-07-23 22:30:19 +02:00
Róbert Kiss 42683e32f9 feat(notification): Add undoable notification, close #318 (#338)
* feat(notification): Add undoable notification

* feat(notification): Add undoable notification

* feat(notification): Use uhk-header to the notification

* half ready solution

* - fix: "Keymap has been deleted" is displayed for macros.
- When a keymap/macro deletion gets undone, please set the route of the restored keymap/macro.
- When the user switches to another route, please make the undo notification disappear.

* fix(keymap): Store prev user configuration in the application reducer

Store the previous state in application reducer, because refactoring the
user-config reducer is not easy

* feat(keymap): Fix review request
2017-07-23 22:17:53 +02:00
Róbert Kiss ce55cac380 fix(keymap): Add tooltips to action icons (#366)
* fix(keymap): Add tooltips to action icons

* fix(keymap): Remove console.log write

* feat(tooltip): New design of the tooltip

* feat(keymap): Show the tooltip of "Long press action" downward

* style(tooltip): Fix linting issues
2017-07-19 23:27:25 +02:00
Róbert Kiss a4d41f36d5 feat(app): Show add-on menu if start app with --addons arg (#359)
* refactor(store): Move app reducer from electron to shared module

* feat(app): Show add-on menu if start app with --addons arg

close: #351
2017-07-18 09:46:55 +02:00
Róbert Kiss 25257132a6 fix(keymap) allow 0 in keymap abbr when rename (#362) 2017-07-18 00:06:36 +02:00
József Farkas c9d8e735de Detect uhk without async delay (#356)
Fixes #353
2017-07-17 02:06:06 +02:00
Róbert Kiss db8a4413de feat(settings): Only display settings in Agent-electron (#358)
close #252
2017-07-17 01:01:29 +02:00
Róbert Kiss 3db019812a feat(keymap): Keymap abbr should be only number or ASCII char (#360)
* feat(keymap): Keymap abbr should be only number or ASCII char

close #341

* fix(keymap): Allow '1' when generate keymap abbreviation
2017-07-17 00:48:31 +02:00
József Farkas c1f96ae820 Hide UpdateAvailableComponent in AppComponent (#355)
Fixes #350
2017-07-15 17:57:22 +02:00
József Farkas a0aac1639a Fix deleting default keymap
Fixes #349
2017-07-15 14:46:46 +02:00
Róbert Kiss 131fdea0c5 refactor: Create uhk-header component (#354)
Create a header wrapper component that will contains the undo
notification component.
2017-07-15 14:41:06 +02:00
József Farkas 3b0540f0d4 Update dependencies
* Angular 4.3.0
* Typescript 2.4.1
* ...
2017-07-15 11:02:29 +02:00
Róbert Kiss dc6a016db2 build: Update .nvmrc -> 8.1.4 (#348)
This file manage the node version on travis build.
Suggest to everyone to use nvm to manage node version on dev environment.
2017-07-15 11:00:24 +02:00
Attila Csanyi 6271802bbc Custom bootstrap tooltip with separate styles and directive (#345)
* Launch application scancodes (closes #328)

* simple directive to map bootstrap tooltip, add sample usage

* Custom bootstrap tooltip with separate styles and directive (closes #329)

* fix: linting issues

* fix: try to ignore stylelint for !important

* review: simple tooltip with html content and custom styles

* cleanup extra html tags for tooltip sample
2017-07-11 17:04:31 +02:00
József Farkas e57a2f8637 Update dependencies (#344)
* Update angular to 4.2.6

* Update rxjs

* Update webpack

* Update type definitions

* Update tslint
2017-07-09 22:10:47 +02:00
József Farkas d06892912f Update node and npm dependencies (#343)
node: >=8.1.0
npm: >=5.1.0
2017-07-09 12:09:15 +02:00
József Farkas 0c52fdf2f8 Macro editing improvements (#342)
* refactor: Remove EditableMacroAction

* Fix smaller macro bugs
2017-07-08 16:05:09 +02:00
József Farkas b51b9c9cb7 Clear key actions without mutating the original layers (#340)
Fixes #339
2017-07-08 13:15:37 +02:00
Attila Csanyi e713c52df8 Launch application scancodes (closes #328) (#331) 2017-07-07 10:10:38 +02:00
Róbert Kiss 67a55363da build(webpack): Fix the request of a dependency is an expression (#337)
* build(webpack): Fix the request of a dependency is an expression

Critical dependency: the request of a dependency is an expression

* style: Fix spaces after object literal braces
2017-07-05 18:35:56 +02:00
Róbert Kiss 1796e61f02 style: Fix styelint warning (#336)
Deprecation Warning: 'selector-no-id' has been deprecated and in 8.0 will be removed.
Instead use 'selector-max-id' with '0' as its primary option.
See: https://stylelint.io/user-guide/rules/selector-no-id/
2017-07-05 18:02:31 +02:00
Róbert Kiss 66525f7e84 style: Fix tslint warning: The 'no-use-before-declare' rule requires type checking (#335) 2017-07-05 18:00:37 +02:00
Róbert Kiss 3a86b77421 refactor(log): Refactor logging service (#332)
* refactor(log): Refactor logging service

Removed the InjectionToken and changed LogService as default logger.
Finally ElectronLogService implements LogService directly.

* refactor: Optimize imports

* fix(app-update): Add missing rxjs imports

* style: Remove extra line
2017-07-05 13:44:52 +02:00
Róbert Kiss f7212320e6 refactor(auto-update): Show notification messages with the angular-notifier (#334)
* refactor(log): Refactor logging service

Removed the InjectionToken and changed LogService as default logger.
Finally ElectronLogService implements LogService directly.

* refactor: Optimize imports

* fix(app-update): Add missing rxjs imports

* style: Remove extra line

* refactor(store): Move app.actions.ts to shared module

* feat(notification): Add notification panel

Add angular-notifier to the app and created the ShowNotificationAction
to manage notifications

* style(notification): Fix tslint suggestion

* fix(notification): Add missing rxjs imports

* refactor(app-update): Refactor app-update notification

* fix(auto-update): Add missing rxjs imports
2017-07-05 13:41:45 +02:00
Róbert Kiss c9a1e9853c feat(notification): display app errors, close #319 (#333)
* refactor(log): Refactor logging service

Removed the InjectionToken and changed LogService as default logger.
Finally ElectronLogService implements LogService directly.

* refactor: Optimize imports

* fix(app-update): Add missing rxjs imports

* style: Remove extra line

* refactor(store): Move app.actions.ts to shared module

* feat(notification): Add notification panel

Add angular-notifier to the app and created the ShowNotificationAction
to manage notifications

* style(notification): Fix tslint suggestion

* fix(notification): Add missing rxjs imports
2017-07-05 13:41:31 +02:00
Róbert Kiss 6bc2bc8331 fix(device): Agent-electron should always read the configuration from the UHK over USB. (#327)
The feature will implement later.
2017-07-02 22:38:29 +02:00
Róbert Kiss 2df8f2ea54 Windows set up permission button #261 (#300)
* style(privilege): Fix typo 'excusive' -> 'exclusive'

* style(privilege): remove unused imports

* style(privilege): Fix typo 'initizalized$' -> 'initialized$'

* feat(log): Add application wide logger and error handler

It is help to debug electron install app on different device

* feat(privilege): Add windows USB driver installation

* build: I need the windows installer to test the app on windows

* fix(privilege): change wdi-simpler installer to zadic

* feat(log): change log level to debug in renderer process

* chore: Add author in package.json

* feat(privilege): Add privilege setter file as extraResource

* fix(log): Allowed transport level change only in main process

* fix(privilege): Fix app path calculation

* fix(privilege): Take the scriptPath between double quote

* build: revert the appveyor settings

* refactor(privilege): Extract vendor ID, product ID and MAX_PAYLOAD_SIZE into constants file

* refactor(privilege): Add both 32 and 64 bit zadics to extraResource of the installer

* feat(device): Add HID API communication protocol

* build: Fix npm install process

* build: Fix npm install process v2

* ci: Add libudev-dev as travis apt dependencies

* ci: Merge travis apt packages

* ci: remove node-hid from build:usb

* ci: try to fix linux build

* ci: node-hid use git repo

* ci: Add libusb-1.0-0-dev to travis apt dependency

* feat(device): Use logging service when communicate with the device

* build: create test build

* build: PUBLISH_FOR_PULL_REQUEST override

* build: revert TEST_BUILD to false

* build: node-hid use package version instead of git repo

* refactor: remove unused device store files from PR

* ci: Manage test build from environment variable

* fix(privilege): Set rules files dir base on dev or prod mode

* fix(log): Extract nested properties of the logged object

* feat(log): use util.inspect in logger service

* build: upgrade @types/node-hid -> 0.5.2

* fix(device): Add extra logging when try to open device.

* fix(device): log device description and not the device

* fix(device): add win specific write

* fix(device): add report id as first byte

* style(privilege): Reformat else and comment in privilege-checker component

* fix(privilege): Comment out windows branch
2017-07-02 20:33:28 +02:00
László Monda 84b13d3219 Reorder the keys of the Whitespace and Miscellaneous sections. 2017-06-29 20:46:16 +02:00
László Monda 0f81a6fb52 Rephrase the help text of the long press action. 2017-06-28 23:24:38 +02:00
László Monda 6a8e7e0100 Rename the Misc category to Miscellaneous. 2017-06-28 23:14:45 +02:00
László Monda a796045b4f Move the Whitespace and Misc sections right after the Punctuation section. 2017-06-28 23:10:25 +02:00
László Monda bdc6c06a7e Move the Whitespace category right before the Misc category. 2017-06-28 22:54:44 +02:00
László Monda 181d864126 Move Numpad keys to the end of the scancode list. 2017-06-28 22:04:25 +02:00
László Monda da1f9b29b5 Rearrange navigation keys. 2017-06-28 21:57:55 +02:00
László Monda 202463488e Use singular "Modifier" just like for "Layer switcher". 2017-06-28 16:45:09 +02:00
László Monda 2a37be94f2 Get rid of the scancodes of 00 and 000. 2017-06-28 10:17:32 +02:00
László Monda d19539972d Clean up scancodes. 2017-06-28 10:11:09 +02:00
László Monda 70b57a901a Refine the phrasing of the bottom macro buttons. 2017-06-27 22:47:12 +02:00
József Farkas 6c271c219a fix: Key macro action saving (#322)
Fixes #321
2017-06-27 22:28:37 +02:00
Attila Csanyi 22a59160fb renaming config-serializer upper camel case file names to dash case (#320)
* renaming: config-serializer upper camel case file names to dash case (closes #305)

* fix: remove then add same source with lowercase

* fix: d.ts file with lowercase
2017-06-27 09:41:07 +02:00
Róbert Kiss 121807a65a Add 'New update available' dialog to the electron version (#299)
* build(tsconfig): Rename root tsconfig.json -> tsconfig.base.json

* feat(auto-update): Add update dialog

When new update available than new message will visible of the top of the screen with 2 buttons 'Update' and 'Close'.
- Update button: Update the application (close and restart)
- Close button: Hide the updatePanel

* fix(auto-update): Add types to the event methods

* style: Add comma after SafeStylePipe import

I forgot add the comma when I rebased the branch

* fix(auto-update): Use electron-is-dev package to detect dev build

I removed the isDev() function from the shared util library because it is electron specific code.

* ci: Change osx_image: xcode8.3

Recommended after the last travis upgrade

* feat(auto-update): Add auto update settings page and save config save on electron platform

* ci: Fix osx image

* ci: Upgrade the electron builder -> 19.6.1

The builder now use the 2 package.json structure and build only
the necessary dependencies.
2017-06-22 14:22:54 +02:00
Attila Csanyi 2598109f8c Add new system scan codes (#316)
Closes #304
2017-06-21 20:09:39 +02:00
László Monda 6e23b2a91b Make the text size of the "Layers:" text next to the layer buttons the same size as the text size of the buttons. 2017-06-21 19:20:05 +02:00
Attila Csanyi bf435f9e82 use bootstrap button group instead of separate buttons (#317) 2017-06-21 17:33:26 +02:00
József Farkas b7b56ca491 Fix invalid scancode option match in KeypressTab 2017-06-19 20:51:39 +02:00
Róbert Kiss 438aab5c71 fix(keymap): Save keymap user configuration after changed (#313)
* fix(keymap): Save keymap user configuration after changed

fix #308 issue

* fix(keymap): remove unused imports

* fix(keymap): change switchMap to map
2017-06-17 21:35:29 +02:00
József Farkas 609fcb9a4a Keyboard split/merge animation (#311) 2017-06-17 21:19:44 +02:00
J??zsef Farkas ecd495b7c2 perf: Cache SvgModules
It will prevent them to be parsed multiple times.
2017-06-17 14:31:25 +02:00
József Farkas 10f44f974a Enable OnPush cd strategy in SvgKeyboardKeyComponent 2017-06-17 14:17:56 +02:00
József Farkas baa48f2a72 refactor animation imports 2017-06-17 13:49:54 +02:00
József Farkas bd7add80cf Update dependencies
Angular 4.2.3
2017-06-17 10:56:12 +02:00
József Farkas 3ab808c61e Update electron-builder 2017-06-17 10:14:57 +02:00
Attila Csanyi 559fec139f Issue 201 - Mark selected key with blue (#290)
* issue-201: initial try

* revert: remove first solution related changes

* feature: change the colour of selected key to blue (empty key selection case not covered)

* typescript: prevent errors in editors due to missing tsconfig for shared

* cleanup: remove unused import

* fix: solve empty key case, pass down selected layerId, moduleId and keyId

* cleanup: remove console.log statement

* cleanup: remove extra line

* review: animation delay shorter, exactly as short as the animation delay of the popover

* review: prevent remaining signature blue when click twice on a key in rapid succession

* review: right signature colour after blending (http://colorblendy.com/#!/multiply/4099e5/cccccc)

* review comments fixes

* review: use simplified condition with help of ‘?’
2017-06-16 15:06:12 +02:00
László Monda 1d376cad55 Fix typo. 2017-06-15 23:59:02 +02:00
József Farkas 16596d8a18 Fix flags restoration in KeystrokeAction fromBinary 2017-06-15 23:51:21 +02:00
László Monda 4414d9cfba Treat keystroke actions as none actions when no scancode, modifiers and long press action is specified. 2017-06-15 23:19:51 +02:00
László Monda 0843ecd89e Fix readCompactLength() 2017-06-15 13:03:02 +02:00
József Farkas 975c4709b4 Remove unwanted SwitchKeymapAction 2017-06-13 23:16:28 +02:00
József Farkas aa38762c42 ANSI and ISO layout handling (#309)
* Read left and right modules

* Add missing styles

* Calculate indices from ids

* Skip missing keys

* Align key actions to match the order specified by the svg

* Fix svg key hover

* Fix key hover

Without using css important
2017-06-13 23:04:57 +02:00
József Farkas f246900cd5 Fix converting to JsonObject in Module 2017-06-13 22:18:05 +02:00
József Farkas 1150f9d0ce Fixes on individual QWERTY keymap 2017-06-13 22:15:03 +02:00
József Farkas 59b546cb6a Fix invalid scancodes on QWERTY fn layer 2017-06-13 21:27:53 +02:00
József Farkas 1420e93a1b Register some missing media icons 2017-06-13 21:27:13 +02:00
Róbert Kiss 367bc42457 refactor(store): Refactor reducer initialisation (#298)
* refactor(store): Refactor reducer initialization

Refactored the ngrx/store reducer initialization, because hard to extend the original solution.
Bad practise the object initialization inside the components / services. The new solution use angular DI everywhere.
Separated the web and electron configuration store.

* Media key support (#294)

* Introduce type for KeystrokeAction

* Increment dataModelVersion

New property 'type' for KeystrokeAction

* Mapping for media keys

* Media key selecting support for KeypressTab

* refactor: Use more meaningful name (selectedScancodeOption)

* Store the keystroke type in key action type instead of a new field

* Fix NoneAction validation
Fixes #301

* Update electron version

It fixes electron build. The types are part of the electron package itself.

* Fix keystroke selection when additional field is given but no scancode (#306)

* Additional media keys with icons (#307)

* Add missing scancodes for media keystrokes

* Use icons for media keys

* Fix media scancodes.

* Create README.md

* build: upgrade electron and typescript version

Electron contains the typings files.

* refactor(store): Refactor reducer initialization

Refactored the ngrx/store reducer initialization, because hard to extend the original solution.
Bad practise the object initialization inside the components / services. The new solution use angular DI everywhere.
Separated the web and electron configuration store.

* build: upgrade electron and typescript version

Electron contains the typings files.

* fix(store): Remove the I prefix from IDataStorageRepositoryService

* fix(store): fix observer operator import

* fix(store): Add missing rxjs imports to user-config effect

* fix(store): Add missing rxjs imports to keymap effect
2017-06-13 14:41:40 +02:00
László Monda 679e20d915 Create README.md 2017-06-12 23:10:47 +02:00
József Farkas 1a456c2ced Additional media keys with icons (#307)
* Add missing scancodes for media keystrokes

* Use icons for media keys

* Fix media scancodes.
2017-06-12 20:46:06 +02:00
József Farkas a8a659dadd Fix keystroke selection when additional field is given but no scancode (#306) 2017-06-11 17:04:03 +02:00
József Farkas e2fef4fb3e Update electron version
It fixes electron build. The types are part of the electron package itself.
2017-06-11 16:16:27 +02:00
József Farkas c4b25aab9b Fix NoneAction validation
Fixes #301
2017-06-11 16:02:27 +02:00
József Farkas efe7e95b3e Media key support (#294)
* Introduce type for KeystrokeAction

* Increment dataModelVersion

New property 'type' for KeystrokeAction

* Mapping for media keys

* Media key selecting support for KeypressTab

* refactor: Use more meaningful name (selectedScancodeOption)

* Store the keystroke type in key action type instead of a new field
2017-06-11 12:11:12 +02:00
Róbert Kiss 8e823b57b4 style(editorconfig): Add json rule to editor config (#297)
We aggreed to use 2 indent size in json files. The reason is npm use 2 indent in package.json and this is the defacto
2017-06-07 08:57:56 +02:00
Attila Csanyi 85db54b00f change macro layout on xs and lg devices 2017-06-06 21:49:21 +02:00
Attila Csanyi 91a4447f2c clicking on a non-active macro action or on the title of the active macro action should cancel the editing of the current macro action 2017-06-06 20:59:55 +02:00
Attila Csanyi fc002ccd4f use pointer cursor type over the whole macro action title bar (better solution) 2017-06-06 20:50:09 +02:00
Attila Csanyi 5fedf94346 use pointer cursor type over the whole macro action title bar 2017-06-06 20:42:44 +02:00
László Monda 118cdc1ff4 Update release script variables. 2017-06-06 00:55:22 +02:00
László Monda fb799bd032 Add Travis secure token. 2017-06-06 00:42:59 +02:00
László Monda e4a905d2e1 chore(release): 1.0.0 2017-06-05 23:44:16 +02:00
László Monda 29ef50047b Update AppVeyor secure token. 2017-06-05 23:42:44 +02:00
Róbert Kiss f2b358ba96 Add electron-builder packager (#293)
* style(.editorconfig): Add json rule to editorconfig file

* build(build): Add application images

These images need to create installers
Contains images for:
- Win
- Mac
- Linux

* fix(device): Mac is not allow excusive right to use USB

* build(npm): Add standard-version script

* chore(device): Fix comment in UhkDeviceService

* chore(release): 1.0.0-alpha.1

* ci(travis): Change travis to c language and add osx, linux build matrix

* build(build): Windows icon size must be at least 256x256

* ci(appveyor): Add temporary GH_TOKEN to test msi installer

* build(tsconfig): Optimalize tsconfigs

Needed a tsconfig.json in the shared/src library because if it not exist the code builded after the second build on mac, and travis linux. Reproduce the error:
- Delete node_modules directory
- npm i
- npm run build
- error occured (ERROR in ./shared/src/polyfills.ts
Module build failed: error while parsing tsconfig.json)
Created a new tscfonfig.json in the project root folder.
The old config files extends this root configs.

* build(tsconfig): in tsconfig-electron-main not override module version

* chore(editorconfig): Delete json rule

* style: Reformat the main package.json to apply editorconfig style
2017-06-05 23:34:46 +02:00
László Monda 6c31088da8 Add Appveyor badge. 2017-05-31 23:05:58 +02:00
Róbert Kiss 14392fe580 Add appveyor CI integration (#292)
* build(npm): Add .nvmrc file

* style(.editorconfig): Add json rule to editorconfig file

* build(npm): Add test srcipt command to the package.json file

* build(appveyor): Add appveyor CI

* build(appveyor): not npm upgrade to the latest version

* style(editorconfig): Revert json rule
2017-05-31 21:30:55 +02:00
Stephen 5dc435953a move to trusty (#291)
avoids need for sudo
2017-05-29 21:44:30 +02:00
László Monda 3b59a1a6fa Update the VID and PID of the bootloader device. 2017-05-24 02:07:30 +02:00
László Monda 52562d0170 Update USB VID and PID. 2017-05-23 23:27:47 +02:00
László Monda c0768503da Set final USB VID and PID. 2017-05-23 23:16:53 +02:00
László Monda b02286ad8d Set final USB VID and PID. 2017-05-23 23:12:48 +02:00
László Monda 47d1bae075 Remove config-schema.json because it's outdated and its ongoing maintenance would be overly laborious. Closes #46. 2017-05-09 19:57:12 +02:00
László Monda 49477faa48 Display voltage. 2017-05-08 22:54:48 +02:00
László Monda 0e7785d3ee Add read-adc.js 2017-05-08 03:00:32 +02:00
Attila Csanyi c57e52fc45 doc: fix renamed uhk-config.json to user-config (#289) 2017-04-28 22:50:40 +02:00
József Farkas a48b99ea05 Update dependencies 2017-04-23 21:26:40 +02:00
József Farkas 3ec31e9eda Remove invalid keyactions from default keymaps 2017-04-09 13:39:20 +02:00
József Farkas 068e287769 Copy SwitchLayer actions from base layer to every none base layer 2017-04-09 13:38:22 +02:00
József Farkas 3952e3347a Remove SwitchLayerActions from non base layers
Closes #286
2017-04-08 21:28:17 +02:00
József Farkas 4b99fb213e Merge udev rules
Closes #279
2017-04-08 21:08:54 +02:00
József Farkas 0e0d2e45ba Fixes download keymap title
Closes #284
2017-04-08 21:01:43 +02:00
József Farkas 32fffaaf2b Use png icon instead of ico format
Fixes #266
2017-03-24 20:59:15 +01:00
József Farkas 195a02bae2 Add missing BrowserAnimationsModule to AppModule of the electron build 2017-03-24 20:36:07 +01:00
J??zsef Farkas 02bf3f48b9 Split the presets into individual jsons
Closes #274
2017-03-24 20:17:36 +01:00
József Farkas 36d68d1a68 Update dependencies 2017-03-24 19:26:37 +01:00
J??zsef Farkas f6744b737a Update angular to 4.0.0 2017-03-24 19:24:31 +01:00
József Farkas d45551c4fd Fixing device open right after attach
We should find a proper fix instead of this hack.
2017-03-19 15:47:22 +01:00
József Farkas b055750e01 Add missing redirect from privilege screen to the main screen 2017-03-19 15:45:20 +01:00
József Farkas ca31e5bb4d Add new tslint rules and fix rule breaks 2017-03-18 23:43:32 +01:00
József Farkas 0e8165a0b4 Update dependencies 2017-03-18 23:08:54 +01:00
László Monda 4c75d736d3 Make options default to {} 2017-03-18 15:45:51 +01:00
József Farkas f4b776185a Fix symlinker 2017-03-12 21:52:57 +01:00
József Farkas 242de59540 Use webpack watch mode when developing with electron
Closes #273
2017-03-12 20:10:41 +01:00
József Farkas adb7abaa12 Use custom ClientRect interface
Closes #251
2017-03-12 18:12:40 +01:00
József Farkas a3f3dc673e Add uuid to Hardware configuration
Closes #267
2017-03-12 17:32:46 +01:00
József Farkas 76a718c324 Update angular 2017-03-12 16:52:30 +01:00
József Farkas d93409ca05 Update dependencies 2017-03-12 16:31:50 +01:00
József Farkas 9f18a2e975 Update electron 2017-03-12 15:50:30 +01:00
Farkas J??zsef 67c8b12eac Update to webpack 2.x 2017-03-12 15:47:09 +01:00
József Farkas 908c7e1e8c Fix building errors 2017-03-11 13:39:49 +01:00
József Farkas 971af0868c Linux permission setup
Closes #260
2017-03-11 12:23:02 +01:00
József Farkas 46fdc61df3 Redirection accross components based on UHK state 2017-03-11 12:04:07 +01:00
László Monda cae0d02dd2 Jump to the bootloader without crashing. 2017-02-28 01:23:56 +01:00
László Monda 33de26b3ab Make jump-to-bootloader.js wait for the UHK and time out. 2017-02-28 00:12:17 +01:00
József Farkas 2c17074ead Fix typo 2017-02-27 19:41:05 +01:00
József Farkas dcf7f3ea1d Add privilige screen component
Closes #259
2017-02-27 19:26:08 +01:00
József Farkas d1dd80eaa8 refactor: UHK Message component 2017-02-27 19:03:26 +01:00
József Farkas 9fcbac808b Correctly updates new keymap abbrevation in SwitchKeymapActions (#270)
Fixes #269
2017-02-26 15:57:51 +01:00
Farkas József 715b924be0 UHK detection
Closes #258
2017-02-18 19:04:35 +01:00
Farkas József c2103c7d50 Revert "Fixes node-usb requiring from electron's renderer thread"
This reverts commit 846fd8941e.
2017-02-18 19:04:35 +01:00
László Monda d7c39d83d1 Add agent-icon.svg 2017-02-18 17:23:38 +01:00
Farkas József 2c0781fd24 Move agent icon to images folder 2017-02-18 13:45:05 +01:00
Farkas József d3459f7c70 Minor changes at CopyWebpackPlugin options 2017-02-18 13:24:13 +01:00
Farkas József e9911fa842 Fix immutability in KeymapActions.SAVE_KEY reducer 2017-02-14 21:06:17 +01:00
Farkas József 8aa2029f55 Add keymap downloading
Closes #199
2017-02-14 20:35:50 +01:00
Farkas József 61c20cd678 Improve npm scripts consistency
Closes #255
2017-02-13 23:10:22 +01:00
Farkas József 846fd8941e Fixes node-usb requiring from electron's renderer thread 2017-02-13 23:07:50 +01:00
Farkas József b883853a3c Update dependencies 2017-02-13 20:11:23 +01:00
Farkas József d51726a62f Rename electron window title 2017-02-12 23:08:36 +01:00
Farkas József 25aa61295d Hide electron menubar
Closes #265
2017-02-12 23:01:03 +01:00
Farkas József e87f64b5e3 Show github ribbon only in web build
Closes #264
2017-02-12 22:39:07 +01:00
Farkas József cbb5ab765f Enable sending user configuration from every screen 2017-02-11 23:48:50 +01:00
Farkas József 28ac42c583 Fix layer-tab toggling label
Fixes #263
2017-02-11 23:31:15 +01:00
Farkas József 0d95b20e70 Send configuration with ctrl + o
Missing request of #213
2017-02-11 22:52:04 +01:00
Farkas József 9a4c5bacb0 Revert "cleanup: Remove .editorconfig and add to gitignore"
This reverts commit 717d5e0f39.
2017-02-11 22:46:58 +01:00
Farkas József f1f8a8d64e Add the whole user configuration to the AppState
Closes #252
Fixes #219
2017-02-11 10:08:04 +01:00
Farkas József e41a62be13 Remove newAbbr from KeymapState 2017-02-07 21:42:47 +01:00
Farkas József 9dcdd6b3b2 refactor: Keymap add component 2017-02-07 20:30:20 +01:00
Farkas József dd9ce4827f Change detection optimization 2017-02-07 20:22:41 +01:00
Farkas József 4031509acd Add app icon to electron
Closes #134
2017-02-07 19:24:59 +01:00
Farkas József bd05da4316 Replace template/styles with templateUrl/styleUrls 2017-02-05 21:39:18 +01:00
Farkas József 604e9cb2b0 Update dependencies 2017-02-05 20:38:46 +01:00
Farkas József 983eb72892 Seperate electron and web target building 2017-02-05 20:31:52 +01:00
Farkas József 517aed1b1c Transfer the layer/keymap/config with node-usb on shortcuts 2017-02-05 20:31:52 +01:00
László Monda 4ed81331b3 Add file. 2017-01-26 01:52:35 +01:00
Farkas József c237d7ab09 Update dependencies 2017-01-19 23:14:19 +01:00
László Monda e99d9da072 Use let instead of var all the way. 2017-01-16 01:16:42 +01:00
László Monda 99be63e5a8 Remove initLeds() and initLedCommands because it's better to rather not mess around with the LED control registers. 2017-01-16 01:13:15 +01:00
László Monda c3457e33b7 Add script. 2017-01-16 01:00:35 +01:00
László Monda 941639e3da Update usage information. 2017-01-15 14:42:19 +01:00
László Monda c2774030c2 Add intervals in usage explanation. 2017-01-15 14:39:47 +01:00
László Monda 8343547906 Add set-led-values.js 2017-01-15 14:38:28 +01:00
László Monda b0b292066c Control the PWM brightness of the left and right keyboard halves separately. 2017-01-15 04:53:01 +01:00
László Monda 93b284cd07 Add script. 2017-01-15 03:58:34 +01:00
László Monda a1f191a324 Rename script. 2017-01-15 03:53:14 +01:00
László Monda e2002dd63b Expose uhk.sendUsbPackets() and implement uhk.sendUsbPacket() based on it. 2017-01-15 03:51:00 +01:00
László Monda a826bd25cb Name file more aptly because both LEDs get toggled. 2017-01-15 03:38:11 +01:00
László Monda d61e7ed128 Move UhkConnection.js and uhkcmd to the newly created legacy directory. 2017-01-15 03:29:18 +01:00
László Monda e54c1df13e Vastly simplify jump-to-bootloader.js by using uhk.sendUsbPacket() 2017-01-15 03:24:33 +01:00
László Monda 73f682193a Expose usb.sendUsbPacketsByCallback() and use it to vastly simplify blink-test-led.js and led-pwm.js 2017-01-15 03:22:13 +01:00
László Monda e87fbb3c11 Dashify filename to be consistent with the other scripts. 2017-01-15 02:24:53 +01:00
László Monda d6d8144bc3 Use let instead of var. 2017-01-15 02:24:08 +01:00
László Monda bdb9c85031 Expose uhk.sendUsbPacket() and vastly simplify {write,read}-eeprom.js by using it. Make led_pwm.js use uhk.js instead of the obsoleted util.js file. 2017-01-15 02:20:44 +01:00
László Monda 339602178a Rename util.js to uhk.js and refactor the dependent scripts to utilize its API. 2017-01-15 01:31:23 +01:00
László Monda e83a7b8cf6 Add usbCommands. 2017-01-15 01:12:01 +01:00
László Monda 0e59a99e36 Ues ES6 features all across util.js 2017-01-15 01:03:29 +01:00
László Monda 199030effb Extract getUsbEndpoints() to util.js. Use ES6 features in led_pwm.js 2017-01-15 01:00:55 +01:00
László Monda 180d40a7a5 Add script. 2017-01-13 22:58:05 +01:00
László Monda a89039ee27 Update CONTRIBUTING.md 2017-01-08 21:44:58 +01:00
László Monda 99012ca976 Add module.json files for add-ons. Add description and slot fields. 2017-01-06 17:43:54 +01:00
László Monda 95703c4a68 Move module SVGs to the /modules directory on a per module basis and add module.json files. 2017-01-06 17:05:36 +01:00
Farkas József df91d0dc99 Add empty keyactions to json representation
Fixes #236
2017-01-05 18:59:01 +01:00
NejcZdovc 61bd915440 Version 1.0.0-alpha.1 2017-01-02 22:22:34 +01:00
Nejc Zdovc ae7d90e634 Added menu key (#245)
Resolves #243
2017-01-02 22:21:47 +01:00
Farkas József de0f06e7e4 Fix config-serializer's README 2017-01-01 10:58:59 +01:00
Farkas József a377bcf3b4 Separate hardware configuration from user configuration
Closes #152
2017-01-01 10:44:20 +01:00
Nejc Zdovc 52fd854e92 Disable button when action is not valid in popover (#244)
Resolves #161
2016-12-31 13:19:20 +01:00
Farkas József cc9081fe81 Remove macro ids from JSON and binary representation 2016-12-31 11:16:09 +01:00
Farkas József e40dbb83b0 Refactor: remove Serializable 2016-12-31 11:16:09 +01:00
NejcZdovc 13d91ad26b Removed fast capturing for add keymap page
Fixes #238
2016-12-30 12:57:56 +01:00
Farkas József de38e9c06e Fixes Keymap and Macro removing
Fixes #235
2016-12-30 11:59:59 +01:00
József Farkas 9b2aa188e6 Use ids in key actions instead of references (#239)
Partially reverts e48fdea
2016-12-30 11:51:46 +01:00
László Monda 6a7efcc2b1 Remove execution permission from SVGs. 2016-12-30 01:53:44 +01:00
László Monda 6e94adb2ec Add updated SVGs for the left ISO keyboard half, left ANSI keyboard half, and right keyboard half. Fixes #144. 2016-12-30 01:36:49 +01:00
Nejc Zdovc 6caeb11dc3 Added capture to keys (#231)
Resolves #143
2016-12-28 17:09:05 +01:00
Farkas József 0081e3e337 Make Esc close popover 2016-12-28 12:41:30 +01:00
Nejc Zdovc 28159ec9c0 Update ng2-select2 (#234)
Fixed init value for keypress tab 
Fixes #230
2016-12-25 16:47:57 +01:00
Farkas József 7feafc7c3c Create polyfills and vendor chunks in a proper way 2016-12-23 19:57:00 +01:00
Nejc Zdovc de364fbfa9 Added capture keystroke to the popover (#229)
Resolves #228
2016-12-23 15:49:16 +01:00
Farkas József 38be204dfc Update dependencies 2016-12-22 22:55:45 +01:00
Farkas József 3cc5077f13 Make node integration work in electron 2016-12-18 14:53:40 +01:00
Farkas József 4ba7d712e5 Bundle 3rd party libs into seperate chunk 2016-12-18 14:51:31 +01:00
Farkas József 3216bb7119 Remove unused require 2016-12-18 14:51:29 +01:00
Farkas József a64247469e Remove some annoying tslint rules 2016-12-18 14:51:27 +01:00
NejcZdovc 4700391b67 Updated ng2-select2 library and added custom filter for keypress tab
Resolves #214
2016-12-18 00:53:21 +01:00
Farkas József f818b0ecf9 Fix svg compile 2016-12-18 00:30:29 +01:00
Farkas József dca2475217 Update webpack-svgstore-plugin to 3.x.x
Closes #119
2016-12-16 23:02:44 +01:00
Farkas József 35e0a45a30 Update ng2-dragula 2016-12-16 22:42:44 +01:00
Farkas József 8d4ecb75c7 Update tslint to 4.x.x
Closes #166
2016-12-16 22:13:05 +01:00
Farkas József 4a05f5ee7b Add missing scancodes
Closes #221
2016-12-16 18:29:12 +01:00
Farkas József 356482f9e9 Throw error in layer tab when it is not usable 2016-12-16 16:46:14 +01:00
Farkas József 31492da0a2 Fix keymap deleting bug 2016-12-15 23:42:20 +01:00
Farkas József f4dd809a93 Keymap and macro redirection handling
Closes #174
2016-12-15 23:17:09 +01:00
Farkas József 6cab3b982a Fix reintroduced macro deleting bug
Fixes #140
2016-12-15 22:59:25 +01:00
Farkas József c48e959ed8 Disable layer switcher actions on non-base layers
Closes #216
2016-12-15 22:02:48 +01:00
Farkas József d086eb3eea Fix change detection bug 2016-12-15 20:09:22 +01:00
Farkas József 9807c5b793 Add extended function keys
Closes #218
2016-12-15 19:35:55 +01:00
Farkas József f5427dbcae Dependencies update 2016-12-15 19:12:31 +01:00
Farkas József f935ec4a09 Refactor keymap-edit keymap$ 2016-12-14 23:27:52 +01:00
Farkas József 5e7e0c4933 Fix key bind animation side effect 2016-12-14 22:48:18 +01:00
Farkas József 42686f4221 Cleanup unused functionality in keyboard wrap 2016-12-14 21:12:31 +01:00
Farkas József a0d5a58f8b Refactor: extract keyboard-slider 2016-12-14 21:02:31 +01:00
Farkas József 5f5bb0b266 Increase dataModelVersion size to 2 bytes
Fixes #217
2016-12-14 17:18:05 +01:00
Farkas József 310cf86981 Update dependencies 2016-12-13 23:30:34 +01:00
József Farkas e48fdea89d Use references in key actions (#204) 2016-12-13 23:09:39 +01:00
Farkas József 3380a9d514 Fix config cleaner 2016-12-13 22:58:18 +01:00
Farkas József cde127ecc2 Increase dataModelVersion to 1 2016-12-13 22:09:27 +01:00
Nejc Zdovc 68814185e7 Select2 improvements (#92)
* Select2 options are now left aligned, alternative text is gray, layer tab have ordinary select
* Increased height of select2 dropdown

Resolves #84
2016-12-11 13:06:02 +01:00
László Monda ffc820f47a Remove jumper scripts because no solder jumpers will be used. These settings will be stored in the EEPROM in accordance with #152. 2016-12-10 00:50:35 +01:00
NejcZdovc 31b3aae64b Implementation of the space 2016-12-09 23:05:13 +01:00
NejcZdovc 96e80ad7ef Fixed graphical glitch 2016-12-09 23:05:13 +01:00
NejcZdovc e3f8ca4357 Popover Animation 2016-12-09 23:05:13 +01:00
NejcZdovc 996ad59dc4 Added popover overlay 2016-12-09 23:05:13 +01:00
NejcZdovc 97b7f8008b Added positioning to the popover 2016-12-09 23:05:13 +01:00
Farkas József a6402d7255 Fix macro name selection 2016-12-05 20:06:13 +01:00
Farkas József cded85ed9c Fix new macro selection
Closes #209
2016-12-05 20:01:53 +01:00
Farkas József 03ca90d558 No macro text and route update 2016-12-05 18:20:33 +01:00
Farkas József f887dc8a96 Macro name select
Closes #208
2016-12-03 20:22:32 +01:00
Farkas József 37125af47a Macro-tab selection fix
Closes #205
2016-12-03 20:06:17 +01:00
Nejc Zdovc f2ce7398d0 Fixed deletion change (#177)
Closes #140 #194
2016-11-30 09:04:28 +01:00
Nejc Zdovc 01214e58b5 Tooltip UX fixes (#202)
Fixes #102
2016-11-29 20:53:24 +01:00
Farkas József 95187afe6a Enable OnPush change detection strategy in SvgKeyboardWrapComponent 2016-11-28 20:12:12 +01:00
Farkas József 55903e4869 Gray out trash at last keymap instead of not rendering 2016-11-27 20:12:09 +01:00
Farkas József 6bbcacfbe6 Refactor: Replace NoneAction with null in JSON representation 2016-11-27 18:27:49 +01:00
Farkas József c42cff71ae Downgrade angular to 2.2.3 and zone.js to 0.6.26 2016-11-27 18:27:49 +01:00
Farkas József 7c0035c971 Don't allow the deletion of the last keymap
Closes #178
2016-11-26 23:36:17 +01:00
Farkas József 780d1219f2 Add empty keymap to presets
Closes #180
2016-11-26 23:15:27 +01:00
Farkas József 4cb46f3339 Make inputs cancelable
Closes #179
2016-11-26 22:49:06 +01:00
Farkas József a70a5fada2 Use default configuration on dataModelVersion mismatch
Closes #191
2016-11-26 21:34:04 +01:00
Farkas József 8efc3d371a Fix main-app scrollbar 2016-11-24 21:49:50 +01:00
Nejc Zdovc 970f9ddf1f Sidemenu alphabetic sort (#187)
Closes #184
2016-11-24 18:32:04 +01:00
Farkas József f68a7f155c Fix keyboard animation 2016-11-24 18:21:12 +01:00
Farkas József 17e144e534 Bump dependencies 2016-11-24 18:21:12 +01:00
Farkas József 1c50d7fe83 Tooltip texts for key actions 2016-11-23 22:44:43 +01:00
Farkas József 06a9c35655 Refactor: MapperService 2016-11-23 22:44:43 +01:00
Farkas József 3d629e370d Lock angular version 2016-11-23 21:53:06 +01:00
Farkas József 56c386bb7b Add default keymap icon hint 2016-11-22 09:37:32 +01:00
Farkas József 8f930092df Remove placeholder in macro-tab 2016-11-20 21:58:07 +01:00
Farkas József 064d2eb29a Remove placeholder in keymap-tab 2016-11-20 21:58:07 +01:00
Farkas József 34eb09ee9c Bump dependencies 2016-11-20 14:32:45 +01:00
Nejc Zdovc 768db3d757 Fixed null problem (#162)
Closes #157
2016-11-20 13:38:24 +01:00
Nejc Zdovc ac499d21f7 Removed current keymap from switch (#165)
Closes #160
2016-11-20 13:24:17 +01:00
NejcZdovc 1d47f9c758 Fixed cursor; Changed settings text position 2016-11-20 13:08:45 +01:00
NejcZdovc b394428110 Added settings link 2016-11-20 13:08:45 +01:00
NejcZdovc e96f3120cf Added text to a buttons 2016-11-20 13:08:45 +01:00
NejcZdovc e784a6ab0b Added duplicate redirect 2016-11-20 13:07:25 +01:00
NejcZdovc 1ea1d0c2a2 Added input validation 2016-11-20 13:02:45 +01:00
NejcZdovc 11c79fd312 Added enter save 2016-11-20 13:02:45 +01:00
Nejc Zdovc 9533f93352 Added hover for keys (#164)
Closes #159
2016-11-20 12:59:00 +01:00
NejcZdovc d42e3093f2 Added action change animation 2016-11-19 11:01:56 +01:00
NejcZdovc 02db20e6c3 Redirect to specific URL of first macro 2016-11-19 10:46:43 +01:00
NejcZdovc 646cb64a8a Redirect to specific URL of favourite keymap 2016-11-19 10:46:43 +01:00
NejcZdovc 0383c50dbc Redirect to newly added keymap 2016-11-19 10:46:43 +01:00
NejcZdovc d2d69ae52d Renamed keymap component to keymap-edit 2016-11-19 10:46:43 +01:00
NejcZdovc ff47222d21 Hide popover when you delete or switch keymap; Disable layer switch when popover is opened 2016-11-19 10:46:43 +01:00
NejcZdovc 68d6dbe723 Fixed default keymap selection in popover; Fixed keymap default image 2016-11-19 10:46:43 +01:00
József Farkas 090d6565ce Correct README.md of usb 2016-11-17 09:01:44 +01:00
László Monda e294b259e2 Add jump to bootloader script. 2016-11-12 22:03:17 +01:00
Farkas József 30d8fbc91f Add README.md to usb demos 2016-11-12 21:21:41 +01:00
Farkas József 3b3c324c8e Fix more USB test scripts on Windows 2016-11-12 21:21:18 +01:00
Farkas József 055cba0575 Fix blink test led on Windows 2016-11-12 15:18:26 +01:00
Nejc Zdovc d8b35f57f4 Fixed macro redirect (#149)
Closes #148
2016-10-23 19:43:26 +02:00
NejcZdovc b5eb8601e2 Add macro 2016-10-23 11:39:03 +02:00
NejcZdovc 3a69726257 Moved list of macros to the new component 2016-10-23 11:39:03 +02:00
László Monda 1063cb2e6e Merge remote-tracking branch 'origin/usb' 2016-10-22 15:13:31 +02:00
Nejc Zdovc a5a60f5862 Added highlight for menu items (#130)
Closes #129
2016-10-21 19:10:57 +02:00
NejcZdovc 721e676eb8 Added sliding effect to the items 2016-10-21 19:08:46 +02:00
NejcZdovc 51c33cec3c Fixed delay tab error 2016-10-21 19:08:46 +02:00
Nejc Zdovc 9369b956d8 Added favicon (#135) 2016-10-21 17:00:51 +02:00
Nejc Zdovc a653333c9b Removed unnecessary services (#125)
They have been replaced with Store.
2016-10-21 16:36:41 +02:00
László Monda c1290d3686 Don't disable the LEDs of the LED display. 2016-10-21 02:41:33 +02:00
László Monda f33f1d71ea Make texts less redundant. 2016-10-20 00:28:00 +02:00
László Monda 729d7b2297 Output text of whether the keyboard halves are merged or split. 2016-10-20 00:26:30 +02:00
László Monda ee404fe09e Display text about the state of the LED jumper. 2016-10-20 00:20:54 +02:00
László Monda f1525679ef Add script for detecting the state of the ISO jumper. 2016-10-20 00:18:37 +02:00
László Monda e44d53f4f3 Add script to test the LED jumper. 2016-10-18 18:58:50 +02:00
László Monda c59900f9b2 Add script to test the merge sensor. 2016-10-17 23:22:03 +02:00
László Monda fec68d8931 Light up the SW11 LEDs of the left and right keyboard halves. 2016-10-17 02:55:49 +02:00
Farkas József b16e83fc30 Don't store preset in local storage 2016-10-16 19:10:00 +02:00
Farkas József 6381f90111 Refactor: DataProviderService 2016-10-16 18:46:39 +02:00
Farkas József e9f0d63f45 Update dependencies (angular to 2.1.0) 2016-10-13 19:18:41 +02:00
László Monda 272663b275 Add read-eeprom.js and write-eeprom.js 2016-10-12 12:51:50 +02:00
Farkas József 5f218e13b3 Add MouseActions to the mouse layer of the QWERTY keymap 2016-10-11 22:20:29 +02:00
László Monda a43d17f497 Extend the script to be able to send commands upon initialization. Enable the ghost image prevention bit which doesn't seem to fix the ghosting issue. 2016-10-10 01:30:44 +02:00
Farkas József 5bf0da3b52 Update dependencies (angular 2.1.0-rc.0, ...) 2016-10-06 20:14:04 +02:00
Farkas József 58443cefe1 Add MouseAction rendering 2016-10-02 18:42:10 +02:00
Farkas József c382418dbe Fix typo in filename 2016-10-02 17:30:23 +02:00
Nejc Zdovc aca22f9429 fix: First macro opening (#123)
Closes #121
2016-10-01 13:42:39 +02:00
NejcZdovc f93477487c Added effects 2016-09-30 23:04:47 +02:00
NejcZdovc c28f564e3f Updated angular to version 2.1.0-beta.0 and select2 to version 0.5.1 2016-09-30 23:04:47 +02:00
László Monda ac5bab2ced Iterate over the alphabet and layer icons. 2016-09-29 02:33:49 +02:00
László Monda dc4aa96482 Add letter definitions and letter drawing function. 2016-09-29 01:48:41 +02:00
László Monda 0fead7b556 Add new script that is partially working. 2016-09-27 17:11:42 +02:00
László Monda 67695151aa Add util.js featuring bufferToString() 2016-09-27 16:08:00 +02:00
László Monda fcd1bc4f58 Update command id according to the changed firmware. 2016-09-27 00:13:03 +02:00
László Monda 07af142718 Transfer the actual payload to be sent. Read and display response. 2016-09-26 23:36:36 +02:00
László Monda 7bbf944ad8 Extract command id. 2016-09-26 02:40:09 +02:00
László Monda aaebf0e051 Prefix the state of the LED with the ID of the LED test command. 2016-09-26 02:38:12 +02:00
László Monda 554a7b45f6 Send 0 and 1 instead of their ASCII counterparts. 2016-09-26 01:56:46 +02:00
László Monda 2b80d75211 Make the test LED actually blink. 2016-09-26 01:40:54 +02:00
Nejc Zdovc 4e13f910dd Data layer - Macro & UX improvments (#117)
Closes #75
2016-09-25 19:54:36 +02:00
Farkas József ee1d8ec59e cleanup: Remove unused ClassArray classes 2016-09-25 14:27:52 +02:00
Farkas József 140709e31f refactor: Macro 2016-09-25 14:26:52 +02:00
Farkas József 2aed594dd1 Add MacroAction Helper 2016-09-25 14:26:50 +02:00
Farkas József 927cc80815 refactor: Module 2016-09-25 14:26:49 +02:00
Farkas József 8c0f202b60 Add KeyAction Helper 2016-09-25 14:26:47 +02:00
Farkas József a719f06618 refactor: Layer 2016-09-25 14:26:45 +02:00
Farkas József 7ba0a0401a refactor: Keymap 2016-09-25 14:26:43 +02:00
Farkas József b78ce778a6 refactor: Preset keymaps 2016-09-25 14:18:23 +02:00
Farkas József cb1f677f31 refactor: UhkConfiguration 2016-09-25 14:18:23 +02:00
Farkas József e3f82b250a Add readArray and WriteArray to UhkBuffer 2016-09-25 14:18:23 +02:00
Farkas József 5ba0c2d12a Fix error message in UhkBuffer 2016-09-25 14:18:23 +02:00
László Monda 3719a6ece3 Add script. 2016-09-25 01:56:21 +02:00
László Monda cb2b08f990 Make the uhkcmd script work and add a package.json for it. 2016-09-25 00:34:15 +02:00
Farkas József 483f3f3231 Fix memory leak in Keymap add 2016-09-24 12:30:00 +02:00
Farkas József fd78b19002 Update dependencies (typescript 2.0.3, ...) 2016-09-23 15:33:22 +02:00
Farkas József 591c240605 Add copy constructors for macro related classes 2016-09-21 22:02:46 +02:00
NejcZdovc 93bfb43051 Added scss variables to keymap header 2016-09-21 21:11:00 +02:00
NejcZdovc e9a6e30a5d Added header component for macro 2016-09-21 21:10:09 +02:00
NejcZdovc e50561170b Optimization of the folder structure 2016-09-21 20:21:47 +02:00
Nejc Zdovc cc3bee4ab2 Add dummy components (#113) 2016-09-21 20:05:30 +02:00
Nejc Zdovc b4a7dbfb20 Keymap clone highlight color (#112)
Adding global styles.

Closes #110
2016-09-21 19:57:04 +02:00
László Monda caf7b14122 Fix link to CONTRIBUTE.md 2016-09-21 01:51:15 +02:00
László Monda 2d46767de3 Update README.md 2016-09-21 01:48:57 +02:00
Nejc Zdovc 8aa29322e5 Adding spaces to imports (#111)
Closes #69
2016-09-20 21:05:38 +02:00
Farkas József e9a66c64c4 tslint: Remove ignore pattern from no-unused-variable and fix the rule break 2016-09-20 20:43:25 +02:00
Farkas József 7e95460451 refactor: rename boot.ts to main.ts 2016-09-20 18:57:43 +02:00
Farkas József 717d5e0f39 cleanup: Remove .editorconfig and add to gitignore 2016-09-20 18:52:41 +02:00
Farkas József e07a036156 npm: Update zone.js to 0.6.25 2016-09-20 18:49:18 +02:00
Farkas József a883a88cd8 npm: Update types 2016-09-20 18:46:20 +02:00
Farkas József 799d1f3839 npm: Remove sortablejs 2016-09-20 18:36:06 +02:00
Farkas József c10699173e cleanup: Remove gulp 2016-09-20 18:25:48 +02:00
Farkas József cb0e66baf0 cleanup: Remove legacy loader 2016-09-20 18:13:51 +02:00
Farkas József 2c86b08d21 npm: Remove handlebars 2016-09-20 18:11:34 +02:00
Farkas József 5850138482 cleanup: Remove legacy macro editor 2016-09-20 18:07:37 +02:00
Mikko Lakomaa 85502bccec Allow sorting while editing macro action (#107)
Closes #106
2016-09-20 17:54:16 +02:00
Mikko Lakomaa 3e85cf45a6 Improve macro sorting visuals (#105)
Closes #103
2016-09-20 11:40:00 +02:00
Farkas József 6fa6d35d86 Update webpack-dev-server 2016-09-18 21:00:50 +02:00
Farkas József c7ff38db12 cleanup: Remove legacy keymap 2016-09-18 20:52:51 +02:00
Farkas József 7a3a377280 refactor: getKeymap 2016-09-18 12:46:00 +02:00
Nejc Zdovc b78bc5850f Keymap data layer (#95) 2016-09-18 12:38:42 +02:00
Farkas József fb8cd163ec Add copy constructors for key actions 2016-09-17 19:42:21 +02:00
Farkas József 813714073e Add some copy constructors 2016-09-17 17:15:57 +02:00
Farkas József 7464948f1c Fix MouseButtonMacroAction serialization 2016-09-17 17:14:55 +02:00
Farkas József 997046c4c1 Fix test-serializer return value 2016-09-17 16:44:07 +02:00
Farkas József 078f2684ef Update dependencies: electron and html-loader 2016-09-16 22:39:49 +02:00
Farkas József 2d38d8e4fb Update Angular2 to final release 2016-09-16 22:34:04 +02:00
Farkas József de838ed545 Fix Key label positioning bug on Firefox
Closes #90
2016-09-16 22:21:36 +02:00
Farkas József ebade0097a Fix unknown keys bug 2016-09-16 21:05:41 +02:00
Farkas József 2a709d12eb Fix path 2016-09-16 21:04:36 +02:00
József Farkas 7e24f463a1 Disable no-string-literal tslint rule 2016-09-14 22:49:56 +02:00
Farkas József 11c642317c Update to angular2-rc.7 2016-09-14 21:06:26 +02:00
Mikko Lakomaa bceb4d2d27 Fix macro sorting (#100)
* Fixed: Macro action sorting
* Changed: Update dragula version in package.json
2016-09-14 19:28:59 +02:00
Mikko Lakomaa fbb4a1cc49 Macro editor (#87) 2016-09-13 21:22:11 +02:00
József Farkas 8a76da8df5 Merge (Hold|Press|Release)(Key|Modifiers) into KeyMacroAction (#99) 2016-09-07 09:02:10 +02:00
Farkas József 858fa0d87c Experimental electron support fixes 2016-09-04 20:15:25 +02:00
Farkas József e5accdc939 Add experimental electron support 2016-09-04 19:49:21 +02:00
Nejc Zdovc b0d377e978 Side menu animation (#97) 2016-09-04 18:52:05 +02:00
Farkas József 3c8a01ce7d Update jQuery. 2016-09-04 16:38:27 +02:00
Farkas József ed269a3f72 refactor: Create folders for key and macro actions. 2016-09-04 16:21:42 +02:00
Farkas József 6415ed7e2b Move types to devDependencies 2016-09-02 00:32:52 +02:00
Farkas József 6f7f6f462c Fix test-serializer building 2016-09-02 00:08:09 +02:00
Farkas József 717ed7fc99 Switch from es6-shim to core-js 2016-09-02 00:02:48 +02:00
Farkas József 02e31edf99 Update dependencies 2016-09-01 23:37:43 +02:00
Farkas József df79c1aaea Add new tslint rules (class-name, ordered-imports) and fix errors 2016-09-01 22:20:21 +02:00
Farkas József 934e02d7e1 Update to typescript@rc 2016-09-01 17:55:22 +02:00
Farkas József a1020982b8 Update to angular2-rc.6 2016-09-01 17:44:51 +02:00
Farkas József 5367346990 refactor: Remove moduleIds 2016-09-01 17:07:57 +02:00
József Farkas 016657c30a refactor: SvgKeyboardWrapComponent (#94) 2016-08-30 18:56:35 +02:00
Farkas József d3e0639e47 Update types 2016-08-30 18:41:55 +02:00
László Monda 69204ab71c Update README.md 2016-08-30 18:22:33 +02:00
László Monda 8b5b157737 Remove duplicate text which is already present in CONTRIBUTING.md
Also add npm version requirement.
2016-08-30 18:21:58 +02:00
László Monda 3fa50827eb Rename CONTRIBUTING.md to CONTRIBUTING.md 2016-08-30 18:20:35 +02:00
László Monda 6506281c37 Create CONTRIBUTING.md 2016-08-30 18:12:56 +02:00
Nejc Zdovc dee9c1077b Add keymap page (#80) 2016-08-29 21:51:30 +02:00
József Farkas bb3a2d77b6 Folder restructuring (#86) 2016-08-28 21:30:48 +02:00
László Monda baf2d41f71 Fix README. (#89) 2016-08-28 20:44:16 +02:00
László Monda 875dbb9526 Update README.md (#88) 2016-08-28 20:33:56 +02:00
József Farkas 25a53df891 refactor: Layers (#85) 2016-08-28 09:01:52 +02:00
Nejc Zdovc e54d63e1c5 refactor: Layers/Keyboard component (#82) 2016-08-28 00:59:19 +02:00
József Farkas 9dfc02214d Travis: Create one script from two. 2016-08-24 23:55:51 +02:00
József Farkas 5277417ec5 Run linting in travis 2016-08-24 22:52:09 +02:00
József Farkas 20f015c254 Refactor: use index files and short import paths. 2016-08-24 21:25:20 +02:00
József Farkas 137f29b1a8 Fix all linter errors. 2016-08-24 20:06:56 +02:00
József Farkas ec049fe7b3 Render key modifiers 2016-08-24 17:50:56 +02:00
József Farkas 3ed0b4f916 KeypressTab: Add missing scancode initialization 2016-08-19 21:56:05 +02:00
Farkas József 50ffde21e1 Travis build status badge
Closes #79.
2016-08-16 17:56:28 +02:00
József Farkas b58eefad47 Add travis config 2016-08-15 22:22:32 +02:00
József Farkas cc246f27d9 Test serializer exit code
It returns 0, when the configurations identical and 1 otherwise.
2016-08-15 22:14:52 +02:00
József Farkas 1cb95840c9 Webpack now fails on error 2016-08-15 22:13:28 +02:00
József Farkas ee5eb29f2a Fix test-serializer building 2016-08-15 19:36:02 +02:00
Nejc Zdovc d5b5f3293a Move style to angular (#72)
* Move global styles to angular app
* Create dummy notification component
* Create dummy html for macro
* Fix click on sidemenu, so that link is the whole line
2016-08-15 12:59:27 +02:00
Nejc Zdovc 094060d8db Update to Typescript 2.0 (#71)
* Switches to Typescript 2.0 and removes typings

You should remove typings folder to remove typing errors.
Closes #64
2016-08-15 11:04:30 +02:00
Nejc Zdovc 7691c88b95 Update ng2-select2 to 0.4.2 (#77) 2016-08-15 09:01:07 +02:00
Farkas József d5907b66d4 Fix typo 2016-08-13 18:41:49 +02:00
József Farkas 37a7945445 Fix npm scripts on Windows 2016-08-13 17:25:36 +02:00
József Farkas baf55077ce Update angular2 to rc.5 and its router to rc.1.
Closes #70.
2016-08-10 18:29:59 +02:00
József Farkas 23b5dab284 reflect-metadata versioning
reflect-metadata should match with the exact version for now.
2016-08-10 12:37:37 +02:00
József Farkas a33f0dc4ff Remove magic numbers in popover.component. 2016-08-08 22:32:19 +02:00
József Farkas 8038f255ec MouseTabComponent template refactoring. 2016-08-08 22:04:33 +02:00
József Farkas 940ce6bcae Remove magic numbers in KeypressTabComponent. 2016-08-08 21:56:02 +02:00
József Farkas ffce89023c Move styles in keypress-tab.component from html to scss. 2016-08-08 21:48:22 +02:00
József Farkas b0b76fe1c2 Remapping: Popover tabs initialization accordance with the key action 2016-08-06 17:26:36 +02:00
Farkas József a09bc3cccc Remove browser-sync and update README.md about setup. 2016-08-03 22:05:56 +02:00
Arpad Csanyi f34edcd7d1 Add publicPath to webpack config to fix dev-server's livereload.
The issue was that the webpack-dev-server seemed to serve the old files
instead of the newly bundled ones.
The explanation of the solution can be found here:
https://github.com/webpack/webpack-dev-server/issues/24#issuecomment-44366325
2016-08-01 21:37:03 +02:00
Arpad Csanyi d591927840 Create flex layout for the popover tabs. #56 2016-08-01 09:49:46 +02:00
Arpad Csanyi 351296d22c Remove fix width from popover layout. #56
By default Bootstrap Popovers are having a max width which has to be
overriden.
2016-08-01 09:49:33 +02:00
József Farkas ac96838e99 Update dependencies. 2016-07-30 14:48:36 +02:00
József Farkas 3282410bf7 Correct stylelint rule. 2016-07-30 14:46:14 +02:00
Farkas József d67efd57ef Remove base href from index.html
Closes #67.
2016-07-23 16:19:28 +02:00
Arpad Csanyi d5abd4a346 Refactor popover scss file to make use of nesting. 2016-07-20 23:13:44 +02:00
Arpad Csanyi 6842239812 Add editorconfig file to standardize basic coding styles. 2016-07-20 22:37:31 +02:00
József Farkas 1de2f8df33 Keypress-tab KeystrokeAction remapping. 2016-07-17 17:01:00 +02:00
József Farkas 7a331d31c4 Improve JSON schema 2016-07-16 17:45:39 +02:00
Nejc Zdovc baaec669e0 Structural refactoring (#68)
* Moved html in scss to separate files
* Moved components to designated folders
* Moved logic from html to ts
2016-07-15 19:23:24 +02:00
Nejc Zdovc 036c2d0a70 Switching to ng2 side menu (#65)
Closes #63
2016-07-11 17:14:56 +02:00
József Farkas d20101c981 Fix webpack module loading order 2016-07-09 17:34:56 +02:00
József Farkas aea19c63b3 Update dependencies (angular2-rc.4, ...) 2016-07-09 16:12:54 +02:00
József Farkas fd40e18761 Disable dumping 2016-06-26 16:37:12 +02:00
József Farkas ebbe1559fc Enabling noImplicitAny 2016-06-26 15:12:50 +02:00
József Farkas 948060f9bf PlayMacroAction rendering 2016-06-25 14:24:07 +02:00
József Farkas 71760289e2 Fix invalid layer. 2016-06-25 13:41:40 +02:00
József Farkas 9acc29ee33 Fix mouse action selection on mouse-tab. 2016-06-25 12:58:05 +02:00
József Farkas a9ebb393ff Use the correct style linter. 2016-06-25 12:46:24 +02:00
József Farkas 53177920bb Update to angular2-rc.3 2016-06-22 18:36:58 +02:00
József Farkas 5847b6f99f Add a single command for linting. 2016-06-22 07:49:36 +02:00
József Farkas 65dbdea5f3 Update typings and bump other dependencies 2016-06-21 20:17:39 +02:00
József Farkas 4a1829e431 Update to angular2-rc.2 2016-06-21 20:02:23 +02:00
László Monda 7748667065 Merge pull request #61 from UltimateHackingKeyboard/fjozsef-redundant
Redundant KeystrokeAction behavior refactoring
2016-06-21 19:52:54 +02:00
József Farkas 639a490113 #57-1 Create one class from: KeystrokeAction, KeystrokeModifiersAction, KeystrokeWithModifiers, DualRoleKeystrokeAction with keeping the different types for binary serialization. 2016-06-21 19:32:58 +02:00
Nejc Zdovc 99ac66f87a Select2 implementation Popover (#59)
Closes #45
2016-06-21 18:44:51 +02:00
Arpad Csanyi 9726139e7e Increase z-index of notification to remove flickering with tooltip. 2016-06-16 00:35:33 +02:00
Arpad Csanyi 769d4a1c70 Mimic the keymap remove with the option to undo the last one. 2016-06-16 00:32:44 +02:00
Arpad Csanyi ee709258b3 When removing a keymap jump to the factory one. 2016-06-16 00:32:03 +02:00
Arpad Csanyi 20ed40dc17 Add more specific class name to the notification action. 2016-06-16 00:30:06 +02:00
Arpad Csanyi 5aabafd373 Improve the look of the UNDO option in the notification. 2016-06-16 00:24:32 +02:00
Arpad Csanyi 1ff59f3005 Hide the notification bubble by default. 2016-06-16 00:17:58 +02:00
Arpad Csanyi ced1c093b9 Only highlight the title if it's truly editable. 2016-06-16 00:16:18 +02:00
Arpad Csanyi f13643c765 Modify title of factory keymap + disable editing and removal of keymap. 2016-06-16 00:15:02 +02:00
Arpad Csanyi bb362d08a4 Make notification dismissable. 2016-06-16 00:13:58 +02:00
Arpad Csanyi bf9ea9976d Add notification bubble. 2016-06-14 23:03:50 +02:00
Arpad Csanyi 47cf8e32db Initialize tooltips on the main application. #24 2016-06-12 19:09:32 +02:00
Arpad Csanyi 4daad35c44 Add remove keymap action. #24 2016-06-12 19:09:32 +02:00
Arpad Csanyi 2fd927a6a1 Add classnames to main panes of the application. 2016-06-12 18:09:21 +02:00
Arpad Csanyi 94cc832552 Reindent file: change 2 spaced to 4. 2016-06-12 18:00:22 +02:00
Arpad Csanyi 00950618df Fix formatting errors reported by stylelint. 2016-06-12 17:47:31 +02:00
Arpad Csanyi 9c0fde5d90 Add rem to unit whitelist. 2016-06-12 17:34:47 +02:00
Arpad Csanyi 8e9de3f893 Temporarily disable indentation linting on vendor prefixed properties. 2016-06-12 17:30:02 +02:00
Arpad Csanyi ad29d8be7b Reindent scss files to use 4 spaces instead of 2. 2016-06-12 17:11:19 +02:00
Arpad Csanyi bc73036b71 Improve structure of scss nested block for easier extension. 2016-06-12 17:00:40 +02:00
Arpad Csanyi e21903c1e2 Fix indentation of the index.html file. 2016-06-12 17:00:40 +02:00
József Farkas 317eb668ab Fix style rulebreaks 2016-06-12 16:51:02 +02:00
József Farkas 9d306111bf Add more stylelint rules 2016-06-12 16:50:43 +02:00
József Farkas 95f8b8cd08 Add scancodes to keypress-tab. 2016-06-12 16:14:24 +02:00
Arpad Csanyi a6297e1dab Remove lint rule as it was false positive for scss files.
`block-opening-brace-newline-after: always` had no effect together with the
`block-opening-brace-space-after: never` rule.
2016-06-12 11:29:59 +02:00
Arpad Csanyi b66866f353 Exclude npm-debug.log from version control. 2016-06-12 11:23:05 +02:00
Arpad Csanyi 9ba96587ea Improve stylelint configuration. 2016-06-12 11:21:25 +02:00
József Farkas 39913889ec Add missing text to mouse-tab. 2016-06-12 10:12:19 +02:00
Arpad Csanyi 9192996df3 Fix main layout of the mouse action editor interface. 2016-06-12 09:52:58 +02:00
József Farkas 13229dc2b6 Cleanup in keypress-tab component 2016-06-11 17:31:59 +02:00
József Farkas 7ea36c308a Update dependencies. 2016-06-11 17:05:01 +02:00
József Farkas 4505f110ac Add styleint (linter for scss files) with initial config. 2016-06-11 17:04:53 +02:00
József Farkas e8de047ed4 Add list to macro-tab 2016-06-04 17:20:02 +02:00
József Farkas 4ea1d766b4 Add icon component 2016-06-04 17:19:00 +02:00
József Farkas f785734bc7 Add isModifierActive function 2016-06-04 17:18:28 +02:00
József Farkas d63e8bb4ef Increase allowed max-line-length to 130 2016-06-04 17:16:51 +02:00
József Farkas 46d16f594a Add missing long press action options 2016-06-02 22:33:15 +02:00
József Farkas 3bc4a1c795 Keymap-tab minor fixes
Remove empty inner style
Move keymaps (real) initialization from constructor to ngOnInit
2016-06-02 19:09:23 +02:00
Arpad Csanyi 0dd6aad3e7 Add help text to mouse speed setup. #49
The positioning of the text needs some more work.
2016-05-31 23:38:30 +02:00
Arpad Csanyi 7dbf9c0b75 Remove label's text from css, so it gets translatable. #50.
Thanks for the comment to NejcZdovc!
2016-05-31 23:18:04 +02:00
Arpad Csanyi 4d548b8c03 Fix missing margin below of button gropup. 2016-05-31 23:12:34 +02:00
Arpad Csanyi 31fabf20b2 Add option for eject.
Adding this as this can be part of shortcuts on a Mac.
E.g.: Control+Shift+Eject to put the display to sleep.
2016-05-30 23:12:16 +02:00
Arpad Csanyi b15c53d1a9 Add playback related options.
The actual scancodes has to be figured out.
2016-05-30 23:10:49 +02:00
Arpad Csanyi b6edb97526 Add extra scancodes to the keypad.
This has to be tested if it is working or not.
2016-05-29 21:29:29 +02:00
Arpad Csanyi 07fdec9c99 Add forgotten scancodes. 2016-05-28 23:10:25 +02:00
Arpad Csanyi f4b1bed8ab Add missing media keys group. 2016-05-27 23:14:17 +02:00
Arpad Csanyi f92b6ce5b3 Add scancode for Caps Lock. 2016-05-27 23:11:50 +02:00
Arpad Csanyi 73ef4ccbd8 Add missing scancodes to miscellaneous group. #47 2016-05-26 00:00:04 +02:00
Arpad Csanyi a0eda9d596 Add group of miscellaneous keys. #47 2016-05-25 23:56:53 +02:00
Arpad Csanyi d1c4ce9d28 Add number pad group. #47 2016-05-25 23:39:37 +02:00
Arpad Csanyi 4c63185147 Rename alternateName to searchTerm as it makes more sense. 2016-05-25 23:24:26 +02:00
Arpad Csanyi 7e60c92d03 Fix typo. 2016-05-25 23:08:49 +02:00
József Farkas 004364b9fd Popover: Mouse tab 2016-05-25 22:25:10 +02:00
József Farkas 283e10be83 Popover layout fix 2016-05-25 22:24:39 +02:00
Arpad Csanyi cff0bd454c Add navigation related keys. #47 2016-05-24 23:08:30 +02:00
Arpad Csanyi ff7b2c255f Add Function keys group. #47 2016-05-23 23:56:27 +02:00
Arpad Csanyi ee96b4aedf Rename value property to scancode. #47 2016-05-23 23:54:09 +02:00
Arpad Csanyi 932688380f Rename dataExplanation to alternateName. 2016-05-23 23:01:47 +02:00
József Farkas b059017a0f Remapping support for tabs 2016-05-23 20:12:55 +02:00
József Farkas 7650b5fe26 Change layer property in SwitchLayerAction from private to public. 2016-05-23 19:55:48 +02:00
József Farkas 0725428309 Rename KeyMap to Keymap 2016-05-23 19:05:17 +02:00
József Farkas dc280dae4c Test serializer typings simplification 2016-05-23 18:53:04 +02:00
József Farkas a64768fc7a Keymap tab: Keymap switching 2016-05-22 23:51:11 +02:00
József Farkas ea712c890b Divide svg-keyboard into two components. One with popover and one without it. 2016-05-22 23:51:08 +02:00
József Farkas 3e767d7339 Move svg processing from main to service. 2016-05-22 23:51:01 +02:00
József Farkas a3396334ae Update typings to 1.0.x. 2016-05-22 23:50:54 +02:00
Arpad Csanyi 321786b055 Start grouping of scan codes. #47 2016-05-22 23:02:30 +02:00
Arpad Csanyi fb8a4843f5 Remove css files from master as they have to be generated with gulp. 2016-05-21 18:00:51 +02:00
Arpad Csanyi 35cf25f68f Add "virtual" label before the button group of keyboard slider. #50 2016-05-21 17:56:21 +02:00
Arpad Csanyi 19c8c6372f Prepare keyboard slider buttons' wrapper for theming. #50 2016-05-21 17:54:32 +02:00
Arpad Csanyi 23d050a866 Fix typo. 2016-05-20 19:20:40 +02:00
Arpad Csanyi abe1555383 Change order of options to match the order of left modifiers.
This is more logical when one is reading through the options than having
the right modifiers in reverse order (compared to the left).
The previous order of the modifiers matched their order on a standard
keyboard when read form left to right.
2016-05-20 19:15:18 +02:00
Arpad Csanyi 628f07e89c Group options of long press action. Closes #48. 2016-05-20 19:05:17 +02:00
Arpad Csanyi c6957107d8 Ignore css files as they are generated from scss sources with gulp. 2016-05-19 10:07:33 +02:00
Arpad Csanyi 5f0968059e The master branch does not need the styles.css.
The css is generated with gulp, so it's not needed. But I'm not adding
it to .gitignore here as it's needed on the `gh-pages` branch.
2016-05-18 19:14:03 +02:00
József Farkas a5b477155c Very initial json schema for uhk config. 2016-05-16 16:59:59 +02:00
József Farkas 929e18106e Media key texts rendering 2016-05-16 16:52:33 +02:00
József Farkas 36f55adcb9 Speed up the keyboard sliding animation. 2016-05-16 16:21:53 +02:00
József Farkas d66f4f056a Move style from main-app.component to different file. 2016-05-16 16:10:20 +02:00
József Farkas a436298e37 Move shared styles and attributes from keyboard-key's children to keyboard-key. 2016-05-16 14:07:08 +02:00
Arpad Csanyi c01c049fc7 Fix icon name in mapper service after rename in ec3ff54. 2016-05-16 12:52:22 +02:00
Arpad Csanyi ec3ff54775 Rename icon, as "switch-keymap" is more consistent with the UI elements. 2016-05-16 12:48:04 +02:00
József Farkas 5759d2db1e SwitchKeymap rendering 2016-05-16 12:38:37 +02:00
Arpad Csanyi 570202bd99 Use flexbox for the layout of the mouse edition interface. 2016-05-15 21:14:34 +02:00
Arpad Csanyi c76269250d Decrease DOM depth of mouse interface and prepare markup for flexbox. 2016-05-15 21:13:38 +02:00
Arpad Csanyi 0127891f3c Add experimental stateful behaviour to the mouse config interface. 2016-05-15 17:39:33 +02:00
Arpad Csanyi 12c10df49b Improve theming of the mouse actions menu.
Remove right border radius when hovered as well.
2016-05-15 16:34:23 +02:00
Arpad Csanyi 8077d41441 Remove old keymap switcher title layouts. 2016-05-15 15:55:08 +02:00
József Farkas ff1721facc Render toggle icon in case of SwitchLayerAction 2016-05-14 19:12:44 +02:00
József Farkas bbd43da945 Initial keyactions to fn layer in uhk-config.json 2016-05-14 19:10:35 +02:00
Arpad Csanyi 1f7e46bc8c Theme mouse action's active nav item to point on it's configuration. 2016-05-13 16:59:31 +02:00
Arpad Csanyi aca98e4760 Add basic interface for the scrolling action. 2016-05-13 10:25:36 +02:00
Arpad Csanyi 833964f054 Hide placeholder button. 2016-05-12 23:23:09 +02:00
Arpad Csanyi db5bfac0ac Add initial markup of the mouse cursor movement configuration. 2016-05-12 23:21:34 +02:00
Arpad Csanyi dae7972a00 Add initial layout of mouse speed interface. 2016-05-12 22:49:41 +02:00
József Farkas a4b2a14e14 Move inner styles to scss files. 2016-05-12 20:01:02 +02:00
József Farkas b9018996bd Sass loading support 2016-05-12 20:00:35 +02:00
József Farkas ac5bf13105 Basic popover tab components. 2016-05-12 19:50:24 +02:00
Arpad Csanyi da44928169 Add compiled css related to the previous change. 2016-05-11 23:36:31 +02:00
Arpad Csanyi ba8c17f339 Initialize theming of the mouse edition interface. 2016-05-11 23:35:58 +02:00
Arpad Csanyi 128db4bf48 Call the new mouse event handler function.
Also apply some refactoring on the code for better readability.
2016-05-11 23:32:19 +02:00
Arpad Csanyi 5e2f10d72f Add event handler for switching between mouse actions. 2016-05-11 23:31:28 +02:00
Arpad Csanyi 319691efd1 Improve markup of the mouse action editor. 2016-05-11 23:30:28 +02:00
Arpad Csanyi d62167fd01 Change the basic layout of the mouse edition interface. 2016-05-11 23:29:22 +02:00
József Farkas 956f22fc8c KeyAction Editor Popover first steps. 2016-05-11 22:52:47 +02:00
József Farkas d4ef07a6b0 Add webpack as gulp task 2016-05-11 20:50:00 +02:00
László Monda 50ea2eac6c Add Linux udev rules for USB device access. 2016-05-10 16:22:58 +02:00
László Monda 42b7160714 Ignore the bundle directory. 2016-05-10 16:20:06 +02:00
László Monda 3bcfb6e068 Add application icon. 2016-05-10 16:19:35 +02:00
László Monda 44d5723318 Add rough USB code that will have to be converted to TypeScript and cleaned up. 2016-05-10 02:58:40 +02:00
Arpad Csanyi 9d38fda72b Toggle the help text based on the selected option. Fixes #43 2016-05-10 00:22:14 +02:00
Arpad Csanyi 911e51b6d1 Update markup to display only the relevant help text. #43 2016-05-10 00:21:16 +02:00
Arpad Csanyi 9516de2f9f Fix classnames of select2 on the layer tab. 2016-05-10 00:07:17 +02:00
Arpad Csanyi 8dedbcc06e Remove select2's search from the layer tab. #43 2016-05-09 23:58:53 +02:00
Arpad Csanyi 9bb0145e71 Add possibility to remove search box from select2. #43 2016-05-09 23:56:54 +02:00
Arpad Csanyi 82ce5accab Resolving #41 by adding css related to the previous change. 2016-05-09 23:20:38 +02:00
Arpad Csanyi e64f162896 Add GitHub ribbon to the bottom right corner. #41
The css pulled in with cdnjs didn't look good, so it was easier to put
this into our css.
2016-05-09 23:18:35 +02:00
Sam Rang 6e218387fc changing how assertions access instance variables to make them non-static-like (#37)
Changing how assertions access instance variables
2016-05-09 19:17:54 +02:00
Arpad Csanyi 864941e5ae Update the help text on the "Long press action". #23 2016-05-08 23:25:27 +02:00
Arpad Csanyi 1f2c0a1787 Fix the alignment of the "Capture Keystroke" button. #23 2016-05-08 23:24:21 +02:00
Arpad Csanyi fe5ae29943 Remove help bubbles from the tab titles. 2016-05-08 23:15:46 +02:00
Arpad Csanyi 04d6ac6727 Remove unneeded styles related to the none action. 2016-05-08 23:09:58 +02:00
Arpad Csanyi 1d4c87ce06 Remove icon and change text of the none action. 2016-05-08 23:09:39 +02:00
Arpad Csanyi fa22e0f377 Remove edition related icons from the macro preview. 2016-05-08 22:58:49 +02:00
Arpad Csanyi 639637e60c Adjust the with of the select box on the keymap switching interface. 2016-05-08 22:54:30 +02:00
Arpad Csanyi 5e02c56d60 Change label on the keymap switching interface. 2016-05-08 22:51:45 +02:00
Arpad Csanyi f8069b81f1 Change label on the macro edition interface. 2016-05-08 22:50:43 +02:00
Arpad Csanyi 14f1a2775c Change the layer switcher editor's layout.
The end of the text varies based on the selected option:
- activate = holding
- toggle = pressing
2016-05-08 22:02:16 +02:00
László Monda c7d5a3f162 Small fix to the documentation. 2016-05-07 23:36:06 +02:00
József Farkas b48fbdd44d Fix readme instructions 2016-05-07 23:26:54 +02:00
Arpad Csanyi 71f1d16051 Show help bubble when a tab is selected. #22
This bubble can be set not to show anymore.
2016-05-07 20:47:54 +02:00
Arpad Csanyi 862a5fdf7d Add help text to the tabs of the keyeditor. #22 2016-05-07 20:47:20 +02:00
Arpad Csanyi 67127fbced Revert the title "Keycode" to "Keypress". #22. 2016-05-06 23:21:59 +02:00
Arpad Csanyi 0ed2816995 Add alternative icons for the scroll action. #27
Just found these arrows while looking for other mouse related graphics,
and wanted to try out.
2016-05-06 23:08:14 +02:00
József Farkas c6b9bcf6dd Fix key label position 2016-05-06 17:56:53 +02:00
József Farkas f267b50587 Update to angular 2.0.0-rc.1 and lock its version 2016-05-06 17:38:52 +02:00
József Farkas f4338ebe8d Fix multiple structural directive bug 2016-05-06 17:38:52 +02:00
Arpad Csanyi 49b64463eb Increase the with of the popover to fit in the new tab. #22 2016-05-05 23:18:12 +02:00
Arpad Csanyi 590bbab748 Remove old Layer action configuration. #22 2016-05-05 23:17:54 +02:00
Arpad Csanyi 45ca30784e Rename some tabs of the popover for better fit. #22
All the names consist of one word only.
The keypress has been changed to keycode, as actually all the other tabs
are configuring keypresses, just they are not sending a keycode.
2016-05-05 23:15:26 +02:00
Arpad Csanyi 2a08d1f19d Add Layer switcher tab to the key configuration popover. #22
The icons used in this commit are not final, as this is just a mockup,
and for this purpose it was easier to use fontawesome (as previously),
instead of adding the svgs.
2016-05-05 23:13:54 +02:00
Arpad Csanyi 93f7400f1d Delete the unneeded layer toggle key layout. 2016-05-04 00:31:16 +02:00
József Farkas 9d6f0a5ce0 Additional labels to mod layer 2016-05-03 23:14:30 +02:00
József Farkas f3981cd03e Update dependencies (mostly angular2 to rc.0). 2016-05-03 21:29:57 +02:00
Arpad Csanyi e42d459f77 Add toggle icon. #27
This toggle icon can be used with the layer switcher keys.
2016-05-03 17:32:42 +02:00
Arpad Csanyi 9c9219e489 Add menu icon. It will more likely change in the future. #27 2016-05-03 17:29:49 +02:00
Arpad Csanyi 0b94f77257 Rename the modifier keys of the default layer.
This way we are following the naming convention of the other key icons.
2016-05-03 17:19:51 +02:00
Arpad Csanyi e02082e3d2 Add icon for the long press action. #27 2016-05-03 17:17:04 +02:00
Arpad Csanyi c84fe7a864 Fix typo in filenames. 2016-05-03 17:13:41 +02:00
Arpad Csanyi 0ed88d4792 Add modifier keys' icons. #27 2016-05-02 23:38:45 +02:00
Arpad Csanyi aa0c88e619 Fix typo in filenames. 2016-05-02 23:38:45 +02:00
József Farkas 1e14de3a4e Label rendering from svg sprite. 2016-05-02 22:31:39 +02:00
József Farkas 83074e9d88 Add more keyActions to uhk-config.json 2016-05-02 22:20:22 +02:00
József Farkas d283093716 Move label setter logic from module to key component 2016-05-02 20:03:09 +02:00
Arpad Csanyi 70ea0318ac Add scroll and move directional icons. #27 2016-05-01 23:41:33 +02:00
József Farkas 7d82e8cce1 Animate between different layers 2016-05-01 17:06:48 +02:00
József Farkas f6432d4d55 Add Layer buttons above the keyboard 2016-05-01 12:32:14 +02:00
József Farkas cddf2a938a Remove unneccessary ids 2016-05-01 11:37:06 +02:00
József Farkas ef393d70dc Add secondary key labels to the view 2016-05-01 11:29:08 +02:00
Arpad Csanyi b2bce1c0d6 Modify layout of keys with two letters on it. #27 2016-04-30 15:10:17 +02:00
Arpad Csanyi 18ffc6f1c4 Key title layout when only multiple modifiers are selected. #27 2016-04-29 22:45:43 +02:00
József Farkas e2eb46b0de Add missing keyboard-key labels 2016-04-29 21:19:50 +02:00
József Farkas a03588cc02 Use let instead of deprecated #variable 2016-04-29 20:21:47 +02:00
József Farkas d0c085d95e Update dependencies (angular2, gulp, rxjs, tslint, typings, zone.js) 2016-04-29 20:16:46 +02:00
Arpad Csanyi a926ce92c2 Add newly created mouse icon. #27 2016-04-28 22:41:33 +02:00
Arpad Csanyi 0cdc62755e Update the mouse icons on the layout with the new one. #27 2016-04-28 22:40:56 +02:00
Arpad Csanyi d17f10deda Add new mouse icons variants. #27 2016-04-27 23:13:59 +02:00
Arpad Csanyi 80862f16da Try a new icon for the mouse actions. #27 2016-04-26 01:53:03 +02:00
Arpad Csanyi 9374d55924 Add different layouts of the selected switch type. #27 2016-04-26 01:22:35 +02:00
Arpad Csanyi 2351975a49 Add Layer Switcher Action key title layouts. #27
These buttons are toggles, so you will be able to use your mouse layer
without having to hold the mouse "key" pressed. Acts like caps lock.
2016-04-26 00:48:38 +02:00
Arpad Csanyi 86d32dc6f8 Add new icon for the macros instead of the play icon. 2016-04-25 22:59:12 +02:00
Arpad Csanyi ade1408314 Create initial design of macro action key titles. #27 2016-04-24 23:34:20 +02:00
Arpad Csanyi 3123bb34b0 All program shortcuts are shown as the keys pressed simultaneously. #27
This is so, as a shortcut can be assigned in multiple programs without
interference, but on the key we can represent only one program(group)
for that shortcut defined on that key.
2016-04-24 22:50:17 +02:00
József Farkas 624e9e433d Add initial keyboard-key rendering 2016-04-24 22:43:59 +02:00
József Farkas cff3c90369 Add scanCodeToTextMapper Class 2016-04-24 22:42:36 +02:00
József Farkas 479f1f624b Add more improved version of uhk-config 2016-04-24 22:39:12 +02:00
József Farkas d3e14e2460 Load uhk-config.json 2016-04-24 22:37:59 +02:00
József Farkas 6c1df933be Add svg prefix to avoid future name collision 2016-04-24 11:43:58 +02:00
József Farkas b9b2fcbf84 Fix type lost caused by incorrect inheritance of ClassArray 2016-04-23 23:45:28 +02:00
Arpad Csanyi 5a123d55c2 Add some more keys on the mod layer. #27 2016-04-23 21:32:00 +02:00
József Farkas c75a6fb746 Add browser-stdout to support process.stdout.write in browser 2016-04-23 19:51:33 +02:00
Arpad Csanyi 8ee071539c Create variant of layout layer switcher layout design: #27 2016-04-22 22:34:03 +02:00
Arpad Csanyi cbf42c760d Add missing keyboard icon. #27 2016-04-21 18:21:37 +02:00
Arpad Csanyi c651adbb21 Add Keymap Switching key title layout. #27 2016-04-20 23:25:38 +02:00
József Farkas e23352ba9f Prevent config-serializer to be compiled automatically in the ng2 project. 2016-04-19 22:45:40 +02:00
József Farkas 07cc4cef2f Use import/export instead of references. Use webpack instead of tsc. 2016-04-19 22:35:16 +02:00
Sam Rang 4a950283b3 implementation of UhkConfiguration 2016-04-18 22:01:41 -05:00
Sam Rang b72327b4dd fix camelcase 2016-04-18 22:01:11 -05:00
Sam Rang 41f2e31ea2 module configurations 2016-04-18 21:40:30 -05:00
Sam Rang 324103e5b6 Merge pull request #35 from srang/feature/bool_isolation
use full byte for each bool
2016-04-18 20:48:38 -05:00
Sam Rang 634aa6c532 move bin<->bool conversion to UhkBuffer 2016-04-18 20:00:27 -05:00
Sam Rang 0c53b49c6a use full byte for each bool 2016-04-18 19:11:07 -05:00
Arpad Csanyi 1cfbe35ae1 Add new icons used on the key titles. #27 2016-04-19 00:07:04 +02:00
Arpad Csanyi 44a93c329d Add new icons key title layouts to the fn layer. #27
This phase contains multiple ides:
- Lock, Search, Calculator: we have text and icon. Would just an icon
be enough?
- The browser related button on the second row are represented by their
shortcut. This can be set up on the keypress action interface.
- In the third line the first shortcut is for stepping back in the
  history. I wouldn't recognize it seeing it on a keyboard, but it's
  consistent with the shortcuts of the second row (which are more
  familiar for everybody)
- The other direction of the history navigation is "represented as the
  media buttons". This is more straightforward when looking at the
  keyboard than it's shortcut would be (cmd+]).
2016-04-18 23:28:12 +02:00
Arpad Csanyi 082103aa9e Fix permissions of example file. 2016-04-18 23:27:50 +02:00
László Monda ad018cd5f1 Merge pull request #34 from srang/feature/macros
Feature/macros
2016-04-18 21:44:23 +02:00
László Monda f37a722551 Merge pull request #33 from srang/feature/keymap_keymaps
Feature/keymap keymaps
2016-04-18 20:55:05 +02:00
Sam Rang e2b0492736 macro macros 2016-04-17 23:48:17 -05:00
Sam Rang 176f94e919 delay and text macros 2016-04-17 23:34:21 -05:00
Sam Rang 4dc3c4f6c3 updating references 2016-04-17 23:27:24 -05:00
Sam Rang 408ddad10d testing int limits and renaming based on specs 2016-04-17 23:22:01 -05:00
Sam Rang fcf9d08f06 move and scroll mouse actions 2016-04-17 23:03:12 -05:00
Sam Rang 6dd479e04b more macro action types 2016-04-17 22:55:20 -05:00
Sam Rang 2688a51b1b simple keypress action macro working w/ macro type determination 2016-04-17 21:52:22 -05:00
Sam Rang 25c096c2fb change bad module config 2016-04-17 21:05:30 -05:00
Sam Rang d2e3bfdb36 keymaps 2016-04-17 21:01:56 -05:00
Sam Rang 3c18e7cf86 Merge remote-tracking branch 'upstream/master' into feature/keymap_keymaps 2016-04-17 21:01:08 -05:00
Sam Rang ec0dcdae2d add tostring 2016-04-17 20:52:04 -05:00
Sam Rang 5a1393a301 lint fix 2016-04-17 20:51:44 -05:00
Sam Rang f820a180fe fix issue with reading strings. looks for start,end instead of start,length 2016-04-17 20:48:57 -05:00
Arpad Csanyi 9bbd5f39b1 Add icons for the fn layer. #27
The icon for the screen lock was created from two icons: display and
lock4.
2016-04-17 21:47:00 +02:00
József Farkas 79b93bdf0a Remove export and import. Fixes cannot find name compile errors. 2016-04-17 21:44:00 +02:00
József Farkas 785cf4b7f3 Modify the ids of keys to start from 0 in both module. 2016-04-17 21:02:17 +02:00
József Farkas 25fa5535da Add isModifierActive helper function to actions with modifier mask. 2016-04-17 20:40:54 +02:00
László Monda d1f5e21e24 Merge pull request #32 from srang/feature/layer_layers
Feature/layer layers
2016-04-17 12:03:49 +02:00
Sam Rang 38238f4d5a s/KeyLayer/LayerName/g 2016-04-16 21:12:05 -05:00
Sam Rang 2dc51f3d72 make things interesting/complicated 2016-04-16 20:55:44 -05:00
Sam Rang e7a6bebe71 layer and layers 2016-04-16 20:54:46 -05:00
József Farkas b6174c8333 Rename bundle folder to build. 2016-04-16 21:38:34 +02:00
József Farkas 86785182a6 Add svg sprite generator for icons. 2016-04-16 21:36:27 +02:00
Arpad Csanyi a2be0d4e25 Add first batch of icons for being able to work on the sprite. #27 2016-04-16 21:10:18 +02:00
László Monda f9377cf294 Merge pull request #31 from srang/master
Module and Modules
2016-04-16 19:29:58 +02:00
Sam Rang 68798bfa64 mirror master more closely 2016-04-16 12:12:59 -05:00
Sam Rang fb29ca9726 cleanup for pr 2016-04-16 11:48:13 -05:00
Sam Rang cd1a49768d commenting asserts out to work around issue with object overwrites 2016-04-16 11:43:55 -05:00
Sam Rang 5f3e80cec5 Merge branch 'master' of https://github.com/UltimateHackingKeyboard/agent-mockup 2016-04-16 09:34:25 -05:00
Arpad Csanyi 387a4e12e8 Add mod layer designs with the menu key. #27 2016-04-16 15:41:21 +02:00
József Farkas d9360b2fb7 Move the fill of keys to the root 2016-04-16 14:57:06 +02:00
József Farkas c47188b2b2 Add coverages of modules 2016-04-16 14:50:13 +02:00
József Farkas d5dc8d8d0e Update angular2 (to 2.0.0-beta.15), webpack and their dependencies 2016-04-16 14:39:20 +02:00
József Farkas acb2fb0af2 Use one svg and render all keys of modules on it 2016-04-16 14:26:50 +02:00
Sam Rang 43beae7043 Merge branch 'master' of https://github.com/UltimateHackingKeyboard/agent-mockup 2016-04-15 09:17:28 -05:00
László Monda 97c025d19b Ease debugging by making the dump much easier to read for deeper object hierarchies. 2016-04-15 01:49:01 +02:00
Arpad Csanyi 96c56c8081 Unify mouse icons + fix text size on some click action buttons. #27 2016-04-15 00:21:16 +02:00
Arpad Csanyi 1f26bd3034 Try mouse icon instead of mouse cursor icon on the given layer. #27 2016-04-14 23:50:02 +02:00
Sam Rang b805435365 Merge branch 'master' of https://github.com/UltimateHackingKeyboard/agent-mockup 2016-04-14 16:49:02 -05:00
Arpad Csanyi 17ae4aab30 Add key title design for some media keys. #27 2016-04-14 02:20:21 +02:00
Arpad Csanyi e51b70eb66 Add key title designs for mouse clicks. #27 2016-04-14 00:15:25 +02:00
Arpad Csanyi 620f260c5b Add scroll key layouts. #27 2016-04-14 00:06:32 +02:00
Arpad Csanyi 8d572648c6 Add mouse movement key title designs. #27 2016-04-13 23:36:37 +02:00
Arpad Csanyi 9458509a8e Add file containing helper rects for alignments. #27
The magenta colored rects are the alignment helpers.
2016-04-13 21:54:17 +02:00
Arpad Csanyi 70c85c9a75 Update basic key title layouts. #27 2016-04-13 21:53:48 +02:00
József Farkas 5542b66871 Fix tslint and related errors. 2016-04-13 21:30:55 +02:00
Sam Rang 6f0dc6d70f example of array problem 2016-04-13 13:28:56 -05:00
Sam Rang 243b8ed24c successfully serializing 1 module, still problem with serializing multiple 2016-04-12 06:56:34 -05:00
Sam Rang 8d5613d236 ignore vim swap files 2016-04-12 06:55:42 -05:00
Arpad Csanyi 9b040c6665 Modifier and layer switcher keys only have primary actions. #27
Possibly we can allow assigning multiple modifiers to a single key (e.g.
one keypress makes: ctrl+shift), so you wouldn't have to press two
modifiers. But that seems really and edge case.
2016-04-11 11:03:52 +02:00
Arpad Csanyi 6cc7fede82 Add some more layout ideas from keys: 1-3. #27. 2016-04-11 10:32:49 +02:00
Arpad Csanyi 41010cf220 Work on key layouts for the base layer. #27
The keys having a magenta background are the ones that are done. Changes
worth mentioning:
- key "4$" vs. "6^": see the difference of the two layout while having
  the same amount of information.
- key "9(" vs. "0)" (same as 7 vs. 8): the first key contains one
  text element and the spacing of between the top and bottom is based on
  line-height, while the second key is divided into 0.5-1-1-0.5
  portions, and the two text objects are aligned in the middle sections.
  This latter layout is more consistent with other parts of the keyboard
  as this same approach is used on the key "4$", and the benefit of this
  layout is that we don't have to deal with line-height, and can easier
  control the final layout.
2016-04-11 09:46:45 +02:00
László Monda 7d0137a232 Include "pointer" into pointer-specific properties for the sake of being explicit. 2016-04-10 23:11:49 +02:00
László Monda 4fb88e9e7c Only allow a single pointer role per module. Extend the data model later if needed. 2016-04-10 23:10:34 +02:00
József Farkas 714f24429c Show keyboard at keymaps-ng2 2016-04-10 18:22:50 +02:00
József Farkas 1547391fd7 Add initital Keyboard component (shows only the first module) 2016-04-10 18:22:50 +02:00
József Farkas 4ccf06efc5 Add KeyboardModule Component 2016-04-10 18:22:50 +02:00
József Farkas f8bcf2ef94 Add KeyboardButtonGroup Component 2016-04-10 18:22:50 +02:00
József Farkas 0ec6b56d9b Add KeyboardButton Component 2016-04-10 18:22:50 +02:00
József Farkas f924a5681f Provide DataProviderService to all descendant components 2016-04-10 18:22:50 +02:00
József Farkas cc6b42de32 Fix ng2 keymap style 2016-04-10 18:22:50 +02:00
József Farkas df3ae6c918 Load svg of the keyboard layout 2016-04-10 18:22:50 +02:00
József Farkas cf1f979c8a Move src/tsconfig.json to the root 2016-04-10 18:22:50 +02:00
László Monda 09a4636ae4 Tweak the configuration a bit. 2016-04-10 12:55:35 +02:00
László Monda f946e98498 Update README.md 2016-04-09 15:37:12 +02:00
László Monda 3a7703571b Remove redudant whitespaces. 2016-04-09 15:00:33 +02:00
László Monda 71be5653c2 Update README.md 2016-04-09 14:59:47 +02:00
László Monda 9c38cf5253 Move agent-config.json and uhk-state.json to src. 2016-04-09 14:54:49 +02:00
László Monda 4ad80aa5f1 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2016-04-09 14:42:27 +02:00
László Monda ffdc846405 Always display the dot at the end of the sentence. 2016-04-09 14:41:58 +02:00
László Monda e18a12908c Update README.md 2016-04-09 14:41:28 +02:00
László Monda dbf322d679 Update README.md 2016-04-09 14:33:17 +02:00
László Monda e7cb1dad13 Update README.md 2016-04-09 14:29:39 +02:00
László Monda 387d529041 Update Agent demo URL. 2016-04-09 14:20:19 +02:00
László Monda ba64cc6da6 Add Function.d.ts 2016-04-09 14:03:02 +02:00
László Monda 8a2fd58c00 Use hex contants for limits for better maintainability. 2016-04-09 13:44:54 +02:00
László Monda 9dde4e6bd7 Add KeyModifiers enum. 2016-04-09 13:35:19 +02:00
László Monda 1c30b4231c Make SwitchLayerAction.getToggleFlag() private. Simplify SwitchLayerAction._fromJsObject() 2016-04-09 13:17:40 +02:00
László Monda ec65369f3c Remove comment because it doesn't help much and contains unrelated information. 2016-04-09 13:12:52 +02:00
László Monda 34ff0d657d Make KeyAction.assertKeyActiontype() and KeyAction.readAndAssertKeyActionId() only expect a single argument. 2016-04-09 00:39:17 +02:00
László Monda a3b83dfb36 Forgot to rename KeyActionType to keyActionType which I done now. 2016-04-08 23:41:47 +02:00
László Monda 7d17cba390 Resolve tslint warnings. 2016-04-08 23:25:26 +02:00
László Monda 16e099d49f Resolve a couple tslint warnings. 2016-04-08 23:07:08 +02:00
László Monda f6eb819cfe Add assertion decorations for various numeric types. 2016-04-08 22:26:00 +02:00
László Monda 49d0ad270b Remove TypeChecker. 2016-04-08 01:42:33 +02:00
László Monda 9c532ecdf7 Make Serializer.stringifyJsObject() private. 2016-04-08 01:42:14 +02:00
László Monda 3d55ff75e9 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent 2016-04-08 01:04:31 +02:00
László Monda ccab8f0be2 Extract Serializable.dumpMethodName() 2016-04-08 01:04:08 +02:00
László Monda 1544aaf364 Update README.md 2016-04-07 02:58:53 +02:00
László Monda 56aa1982b1 Dump transformations only if Serializable.enableDump is true. 2016-04-07 02:51:21 +02:00
László Monda 9645d70df8 Don't dump compact length values because they seem duplicate given that they're composed of integer(s). 2016-04-07 02:39:19 +02:00
László Monda b812753e06 Dump array length in ClassArray_fromBinary() 2016-04-07 02:37:24 +02:00
Arpad Csanyi 7b1075c65f Create new design implementations of the keys. #27. 2016-04-06 23:37:30 +02:00
László Monda e9c84007b8 Merge pull request #29 from fjozsef/master
Angular2 initial support
2016-04-06 23:08:27 +02:00
József Farkas dcf5cbe4d8 Add Angular2 2016-04-06 21:44:53 +02:00
László Monda 3d8b6eea1a Update README.md 2016-04-06 03:41:24 +02:00
László Monda 958acc95a6 Update README.md 2016-04-06 03:28:38 +02:00
László Monda d20adc2c5a Update README.md 2016-04-06 03:27:10 +02:00
László Monda 8fcdbbbe73 Update README.md 2016-04-06 03:19:01 +02:00
László Monda 71e0d436e2 Update README.md 2016-04-06 03:14:39 +02:00
László Monda 56438f8ba1 Create README.md 2016-04-04 03:12:47 +02:00
László Monda d0a4e27765 Remove the now redundant KeyActionfactory. 2016-04-04 02:52:32 +02:00
László Monda 3ae8c3eb4b Add KeystrokeModifiersAction. 2016-04-04 02:51:09 +02:00
László Monda aac65cca2e Dump every primitive type that UhkBuffer implements, not just uint8. 2016-04-04 02:34:44 +02:00
László Monda 15b27271a0 Move the gist of KeyActions to UhkArray and rename it as ClassArray. Make KeyActions descend from ClassArray. Improve array buffer dumping. 2016-04-04 00:06:18 +02:00
László Monda 0a0eb4c718 Chop off the tail of overly long JSONs. 2016-04-03 21:10:41 +02:00
László Monda 35da91b6ee Fix method name. 2016-04-03 19:23:50 +02:00
László Monda 5c4e9d5912 Dump Serializable.toBinary() 2016-04-03 19:18:01 +02:00
László Monda b0b7a642a4 Dump UhkBuffer.toJsObject() 2016-04-03 19:09:49 +02:00
László Monda a0ed4bd5a7 Further tweak the display of the buffer dump. 2016-04-03 19:05:55 +02:00
László Monda c92831907b Dump buffer operations in a nicer and more compact way. 2016-04-03 02:47:06 +02:00
László Monda ec65753246 Dump Serializable.fromBinary() 2016-04-03 02:38:23 +02:00
László Monda 2b91aa3152 Add UhkArray. Don't dump arrays. 2016-04-03 01:25:07 +02:00
László Monda 7841779b46 Make Serializable dump fromJsObject() calls. 2016-04-02 00:58:06 +02:00
László Monda 2dca5c1c14 Ignore uhk-config-serialized.bin 2016-04-01 23:38:48 +02:00
László Monda f17448c59b Compare binary configurations. 2016-04-01 23:35:38 +02:00
László Monda c8498eab5e Fix the rest of serialization problems and make test-serialize.ts compare the original and resulting JSON. 2016-04-01 23:08:37 +02:00
László Monda 4d5f8161e1 Fix the serialization of MouseAction.mouseAction 2016-04-01 22:48:40 +02:00
László Monda fb5ac38188 Make SwitchLayerAction serialize the correct layer. 2016-04-01 22:33:55 +02:00
László Monda 0ea8fdf5da Add a KeystrokeWithModifiersAction to the to uhk-config.json 2016-04-01 18:18:19 +02:00
László Monda d775a3db3c Make test-serializer.ts serialize and deserialize the configuration. 2016-04-01 18:15:04 +02:00
László Monda 3840d0a623 Add Buffer.getBufferContent() 2016-04-01 17:42:14 +02:00
László Monda fc9e8efdda Update repository URL. 2016-04-01 17:29:24 +02:00
László Monda 6f1097b29a Rename serializeConfig.* to test-serializer.* 2016-04-01 17:28:49 +02:00
László Monda fa5a420838 Update README.md 2016-04-01 16:01:00 +02:00
Arpad Csanyi 891d29ab2d Add design for the key titles. #27
On this picture there are good and bad examples as well. Check the
corresponding ticket for further information.
2016-04-01 10:34:11 +02:00
László Monda bf223ddc3e Write the binary representation of the JSON configuration. 2016-04-01 03:46:19 +02:00
László Monda 1697d673f2 Use the members of the newly added KeyActionType object because static members were uninitialized. Handle PlayMacroAction in the KeyActionFactory. 2016-04-01 03:43:34 +02:00
László Monda fcd0d5b5b3 Move assert functions to assert.ts 2016-04-01 02:42:40 +02:00
László Monda aa812a477b Initialize array. 2016-04-01 02:29:25 +02:00
László Monda adca007cac Add KeyActionFactory. Add compact length related methods to UhkBuffer. Add KeyActions. 2016-04-01 01:55:34 +02:00
László Monda ae6342911c Make KeyAction able to instantiate every KeyAction subclass. 2016-03-31 16:36:40 +02:00
László Monda ad5118a62c Remove tasks. 2016-03-31 12:52:45 +02:00
László Monda 9029476d37 Update the path of typings. 2016-03-31 12:45:42 +02:00
László Monda fda7efab8b Ignore the typings directory. 2016-03-31 12:35:31 +02:00
László Monda f8b0f6bd4c Pull type definition files in the post install phase. 2016-03-31 12:20:53 +02:00
László Monda 49e804ea6d Move typings.json to the root directory. 2016-03-31 12:15:04 +02:00
László Monda 5e55e8436c Move tslint.json to the root directory. Add the lint task to run tslint. 2016-03-31 12:04:06 +02:00
László Monda 386882e1c6 Rename SwitchLayerAction.ts to SwitchKeymapAction.ts and vice versa, so that these files contain their relevant classes. 2016-03-31 11:30:50 +02:00
László Monda 3cb91ad478 Add assert decorator functions. 2016-03-31 10:12:41 +02:00
László Monda d2f3ec62f0 Use template strings where needed. 2016-03-30 22:17:07 +02:00
László Monda 45dc8a520f Make layer toggleable. 2016-03-30 17:55:10 +02:00
László Monda bbd3227645 Add SwitchLayerAction. 2016-03-30 17:43:27 +02:00
László Monda 5b6f62c113 Make the first byte of KeyAction items purely denote their type. Make the binary representation of KeyAction items variable-length. 2016-03-30 17:19:09 +02:00
László Monda 4bd1c8b3e9 Let's not duplicate part of the KeyActionId enum as LongPressActionId because duplication should only cause troubles down the road. 2016-03-30 12:59:03 +02:00
László Monda 5bd6c0a8a0 Use KeyActionId values wherever possible. Add some further value checks. Assign this.mouseAction properly. 2016-03-30 12:31:53 +02:00
László Monda 17e56fdf7c Add KeyActionId enum. 2016-03-30 02:19:10 +02:00
László Monda 0edde3236a Add TypeChecker and use its methods wherever possible. 2016-03-30 01:59:05 +02:00
László Monda 94e5d55d8f Add DualRoleKeystrokeAction. 2016-03-30 01:48:08 +02:00
László Monda 7660bdb729 Rename copy-pasted identifiers. 2016-03-29 23:03:38 +02:00
László Monda a721dd3212 Add SwitchKeymapAction 2016-03-29 23:02:36 +02:00
László Monda 1b75c067f4 Add PlayMacroAction. 2016-03-29 22:56:51 +02:00
László Monda 5f6727b53a Rename KeyActionNone to NoneAction. 2016-03-29 13:07:33 +02:00
László Monda 00827b1b94 Add MouseAction. 2016-03-29 13:05:48 +02:00
László Monda 03dbf3a142 Move the classes of the config items into the newly created config-items directory. 2016-03-29 02:05:59 +02:00
László Monda ecb9d6f73c Rename model to config-serializer 2016-03-29 01:56:58 +02:00
László Monda d25910b969 Remove redundant code that has already been ported as classes. 2016-03-29 01:56:00 +02:00
László Monda 01e06573df Add license. 2016-03-29 01:48:37 +02:00
László Monda 30f735d0ac Import classes in the proper way to not cause runtime errors. 2016-03-29 01:43:52 +02:00
László Monda b2f5bf1d66 Throw consistent error messages. 2016-03-29 00:34:49 +02:00
László Monda 0aeec88cb5 Make Serializable a generic. Make fromJson() and fromBinary() return the generic type. 2016-03-29 00:17:11 +02:00
László Monda 924234cea8 Extract key action types to their respective classes. 2016-03-28 23:59:09 +02:00
László Monda 81fe488dce Rename actionType to keyActionType and macroActionType respectively. 2016-03-28 17:10:30 +02:00
László Monda cbf83cf778 Add KeyActionNone 2016-03-26 14:58:57 +01:00
László Monda 252b0969d6 Merge branch 'master' of github.com:UltimateHackingKeyboard/agent-mockup 2016-03-26 02:53:42 +01:00
László Monda 9d77d7212b Add UhkBuffer.backtrack() and implement the KeyAction class. 2016-03-26 02:52:50 +01:00
Arpad Csanyi 32b219a483 Remove red lines from keyboard designs. 2016-03-26 01:03:12 +01:00
Arpad Csanyi f844350782 Change the order of Scancode and Modifiers fixing #23.
I find the current spacing between the "Long press action" and the
"Modifiers" is enough, and not too much.
2016-03-26 00:54:25 +01:00
Arpad Csanyi 5099ea2f01 Close #21 by making the border of the popover's tip black. 2016-03-26 00:47:38 +01:00
Arpad Csanyi f5756a72bd Restructure scss file to make use of basic language features. 2016-03-26 00:45:56 +01:00
Arpad Csanyi 1c05abe9b9 Make scss file from old style.css and compile it as well. #21 2016-03-26 00:27:38 +01:00
Arpad Csanyi 60b11f9a69 Add css related to the previous change. #21 2016-03-26 00:26:59 +01:00
Arpad Csanyi 4c4717a982 Set currently selected key's color to the primary color. #21
This commit relates to #18 as well, as we will have to refactor the
color set here after finishing that issue.
2016-03-26 00:16:39 +01:00
Arpad Csanyi c62b8506e9 Close #19 by removing empty stars from the keymap menu items.
This way only the currently set default keymap will have an indicator in
the menu, and there won't be any interaction possible from there.
2016-03-26 00:00:06 +01:00
Arpad Csanyi 74cfe6d1af Close #20 by removing drag handles. 2016-03-25 23:32:52 +01:00
László Monda 32646f3616 Validate scancode via accessor. 2016-03-25 21:53:30 +01:00
László Monda 32adbf2124 Deserialize the binary representation of Keystroke. Check scancode validity. 2016-03-25 21:02:18 +01:00
László Monda b9fe33d5d6 Make UhkBuffer allocate a Buffer. 2016-03-25 20:46:33 +01:00
László Monda 0c7ff11f33 Add tslint.json and fix coding style accordingly for the most part. 2016-03-25 18:33:51 +01:00
László Monda 82f181d184 Add tslint to devDependencies and clean up the codebase according to tslint suggestions. 2016-03-25 02:02:20 +01:00
László Monda 468606481c Implement UhkBuffer readString() and writeString() methods. 2016-03-25 01:30:07 +01:00
László Monda 993042e89c Add UhkBuffer read methods and rename Uint to UInt in its other methods. 2016-03-24 22:49:08 +01:00
László Monda b6038d84d6 Add type definitions to the methods of UhkBuffer. 2016-03-24 22:32:48 +01:00
László Monda 581f503b13 Prefix the name of UhkBuffer write methods with "write". 2016-03-24 22:23:05 +01:00
László Monda 483053a991 Add Serializable.ts and KeystrokeAction.ts 2016-03-24 20:56:27 +01:00
László Monda 25b7cad4ab Referenec UhkBuffer.ts as an internal module. 2016-03-24 18:25:11 +01:00
László Monda 015ed35f3c Loosely port the serializer to TypeScript. 2016-03-24 02:48:22 +01:00
László Monda efd1f6f65f Update README.md 2016-03-22 23:11:06 +01:00
László Monda 018dce4b81 Get rid of Bower and thereby close #4. 2016-03-22 23:06:19 +01:00
László Monda 91d3e85516 Fetch Sortable via npm instead of Bower. 2016-03-22 23:05:20 +01:00
László Monda e4263eec19 Pull Font Awesome via npm instead of Bower. 2016-03-22 22:59:19 +01:00
László Monda a877277c2a Merge branch 'master' of github.com:UltimateHackingKeyboard/agent-mockup 2016-03-22 22:55:26 +01:00
László Monda 45c57d3257 Pull handlebars via npm instead of bower. 2016-03-22 22:55:02 +01:00
László Monda e79cdcd50f Update README.md 2016-03-22 22:48:41 +01:00
László Monda adbf5a568d Pull select2 via npm instead of bower. Fix some bootstrap resource links that I managed to screw up lately. 2016-03-22 22:43:03 +01:00
László Monda 9f87567cf6 Remove the redundant type="text/css" attribute. 2016-03-22 21:30:14 +01:00
László Monda 5365ac9229 Pull bootstrap via npm instead of bower. 2016-03-22 21:27:35 +01:00
László Monda 6952b554c9 Remove jQuery from the bower_components directory. 2016-03-22 21:15:14 +01:00
László Monda e5a65f2ad2 Remove the rest of the redundant type="text/javascript" attributes which I forgot to remove. 2016-03-22 21:14:16 +01:00
László Monda b2757fb56c Remove the redundant type="text/javascript" attributes. 2016-03-22 21:11:01 +01:00
László Monda 667490011d Pull jQuery via npm instead of bower. 2016-03-22 21:05:46 +01:00
László Monda f604b94012 Add missing fields to package.json and make these dependencies devDependencies. 2016-03-22 20:52:11 +01:00
László Monda 7746810ac7 Update README.md 2016-03-22 19:15:54 +01:00
László Monda 33b55c531f Add image. 2016-03-22 19:14:16 +01:00
László Monda 3ab17db600 Update README.md 2016-03-22 12:12:58 +01:00
László Monda 4ad771fe08 Update README.md 2016-03-22 12:11:16 +01:00
László Monda f6fc0a7f64 Update README.md 2016-03-22 12:10:44 +01:00
László Monda e1a9a276cd Update README.md 2016-03-22 12:08:37 +01:00
László Monda a0dfffce4c Remove the priority field which won't be used anymore. 2016-03-22 02:14:32 +01:00
László Monda 1107619b1a Serialize switch layer action the final way. Add toggle flag. 2016-03-20 23:40:24 +01:00
László Monda 7a529fb4de Add layer priority field. 2016-03-20 11:55:09 +01:00
László Monda 7c9ca1f5b2 Use module ID instead of a string to identify module configurations. Add initialSpeed property. 2016-03-20 11:47:55 +01:00
László Monda 8c0694901b Fix JSON. 2016-03-20 11:42:10 +01:00
László Monda 20c903113d Add signature, prologue, epilogue, brandId properties and make hardwareId numeric. 2016-03-20 11:41:00 +01:00
László Monda 27e65b36e5 Put module bindings inside of layers, not the other way around. Use IDs instead of strings for identifying modules. Update script. 2016-03-20 11:33:17 +01:00
László Monda 4199031111 Add the rest of the layers as a placeholder. 2016-03-20 02:42:02 +01:00
László Monda 1af09f99ab Invert property because merged state can be explicitly detected. 2016-03-20 02:41:03 +01:00
László Monda b62d694eb3 Add uhk-state.json 2016-03-20 02:39:55 +01:00
László Monda 8d4c9add51 Add Agent configuration file. 2016-03-20 02:22:05 +01:00
László Monda d4aabc1046 Add layer switcher key type. 2016-03-20 02:15:19 +01:00
László Monda 01ca18ba34 Identify keymaps and macros by numeric IDs. Use keystroke naming instead of key. 2016-03-20 01:39:49 +01:00
László Monda 4f052b3789 Close array with a 0 byte. Remove the couple writer calls at the beginning along with console.log() 2016-03-20 01:22:07 +01:00
László Monda 31363c3790 Replace "change keymap" with "switch keymap" because the latter is less ambiguous. 2016-03-19 13:26:02 +01:00
László Monda 3fbae15292 Write leftward instead of leftwards because this seems to be the common usage. 2016-03-19 13:21:48 +01:00
László Monda 9bf938a617 Fix typo. 2016-03-19 13:18:31 +01:00
László Monda 4391532e35 Loosely serialize key actions. 2016-03-19 03:05:00 +01:00
László Monda ed92d46fd3 Add script to serialize the JSON configuration as binary. 2016-03-18 22:32:51 +01:00
László Monda e02132eb68 Update file in the hope that it'll be accessible via GitHub pages without explicitly writing index.html at the end of the URL. 2016-03-18 19:44:26 +01:00
László Monda 74c928622b Use arrays instead of object properties wherever possible. 2016-03-18 18:57:27 +01:00
László Monda 031718fb21 Add the JSON of the UHK configuration to be serialized to the EEPROM. 2016-03-18 18:04:02 +01:00
Arpad Csanyi 13e477d03c Recalculate .keyboard-slider height when changing imgs to svgs. #15.
If UI is loaded on a smaller screen, the svg will be cut in half as the
height of the image will be smaller then the height of the svg. There
could be other solutions for this, but this was the quickest, and it's
sufficient for the purpose of the mockup.
2016-03-17 16:08:36 +01:00
Arpad Csanyi 7ab20e4a6f Remove unneeded console.log(). 2016-03-17 16:08:18 +01:00
Arpad Csanyi af9a2416e2 Make the iframe 300px heigher so there will be space for dropdowns. #15 2016-03-17 16:04:48 +01:00
Arpad Csanyi d761c9c93f Fix typos. 2016-03-17 15:58:02 +01:00
Arpad Csanyi 0c8e9fe6f1 Quick mocking of the popover displaying functionality. #15
Its main purpose is to show colors and general layout. Precise
positioning is still missing.
2016-03-17 15:48:32 +01:00
Arpad Csanyi fd981fb79b Add basic theming to the keyedior popover (and iframe). #15 2016-03-17 15:47:47 +01:00
Arpad Csanyi c976cb056b Version of keyeditor popover designed to be displayed in popover. #15
This is needed as the other version has a small menu to switch between
the macro and the keyeditor mockups.
2016-03-17 15:45:56 +01:00
Arpad Csanyi 6585859346 Add iframe containing the keyeditor popover. #15 2016-03-17 15:44:52 +01:00
Arpad Csanyi c3d89d88d3 Fix keymap names. #15 2016-03-17 15:43:45 +01:00
Arpad Csanyi 7be4c27ce5 Change keyboard images SVG to inline SVG. Resolves #14. 2016-03-17 13:44:43 +01:00
Arpad Csanyi 589f2455ed Add missing (light) vertical bar for primary buttons. #6 2016-03-17 00:31:57 +01:00
Arpad Csanyi 32750c5121 Add basic sliding functionality. Resolves #6.
At least for the mockups I've chosen to use jQuery's animate function
for this functionality instead of css3 transitions. The reason is that I
have to compute widths with js, and the whole click event and class
addition/removal is handled there.
2016-03-17 00:29:35 +01:00
Arpad Csanyi 335f7be207 Add general _init() function. #6
This function is used to be able to call the same initialization process
for a given view every time we load that view. At the moment of
committing it's not really usable, but it can solve some issues later.
2016-03-17 00:23:21 +01:00
Arpad Csanyi 3a4b83f51c Remove unneeded console.log(). 2016-03-17 00:22:07 +01:00
Arpad Csanyi a48582f1b0 Theme the keyboard slider. #6 2016-03-17 00:21:05 +01:00
Arpad Csanyi bbd5aa60b4 Prepare layout and markup for the slider. #6 2016-03-17 00:18:44 +01:00
Arpad Csanyi 48317bbaa6 Remove owl carousel relate resources. #3 2016-03-15 23:14:12 +01:00
Arpad Csanyi 5e56dc81b5 Remove owl carousel related settings from the files. Fixes #3. 2016-03-15 23:02:23 +01:00
Arpad Csanyi fc9150081d Remove owl carousel library. #3 2016-03-15 22:54:25 +01:00
Arpad Csanyi a060d221bf Add compiled css related to the previous changes. 2016-03-15 22:47:17 +01:00
Arpad Csanyi cc2771934f Add missing image files. 2016-03-15 22:46:03 +01:00
Arpad Csanyi 0eaea4852b Show handle on sortable buttons resolves #9. 2016-03-15 22:45:03 +01:00
Arpad Csanyi 5da91749af Make the content match the default active menu item. 2016-03-15 22:43:52 +01:00
Arpad Csanyi 9e4457ad0a Fix css path of the macro mockup. 2016-03-15 20:48:46 +01:00
Arpad Csanyi d1cc203cab Fix links and GoogleTagManager code after the rename. 2016-03-15 20:46:45 +01:00
Arpad Csanyi 93f89a8a63 Make the app UI the default page on the mockup gh pages. 2016-03-15 20:43:47 +01:00
Arpad Csanyi 798eb4bf6c Add macro related js resources to the app. #7 2016-03-15 20:04:32 +01:00
Arpad Csanyi f18d41d678 Add new macro.css file to the app. #7 2016-03-15 17:47:53 +01:00
Arpad Csanyi 41ff7fe598 Create scss file from the old macro.css file. #7 2016-03-15 17:46:46 +01:00
Arpad Csanyi d7e4fa19ab Refactor general list styles as it was to specific. #5. 2016-03-15 17:35:31 +01:00
Arpad Csanyi 0bdf61a3a3 Fix bottom menu's depth. 2016-03-15 10:27:17 +01:00
Arpad Csanyi 8a1323d5bb Refactor app.scss to make use of nesting. This is part of #5. 2016-03-15 10:25:51 +01:00
Arpad Csanyi 7f22eb610d Remove "action links" related parts as they are not needed any more. 2016-03-14 17:48:46 +01:00
Arpad Csanyi 6148d12c84 Switch view on the right based on the selected menu item. 2016-03-14 17:39:24 +01:00
Arpad Csanyi eab1e0d0a8 Add data attributes on menu items.
The view on the right pane will be switched based on this.
2016-03-14 17:37:05 +01:00
Arpad Csanyi 933421e94f Add classes to make view switching easier on the mockups. 2016-03-14 17:35:58 +01:00
Arpad Csanyi bc0db45e6c Apply more general classes on pane title elements. 2016-03-14 16:52:54 +01:00
Arpad Csanyi 4d18b7a460 Make wrapper classes consistent. 2016-03-14 09:45:53 +01:00
Arpad Csanyi 1797b50847 Macro edition interface title theming+functionality. #7
The migration of the macro theming will come after.
2016-03-14 09:37:38 +01:00
Arpad Csanyi 68d566e233 Create basic markup of the Macro edition interface. #7 2016-03-14 09:34:29 +01:00
Arpad Csanyi 94062a5fde Reference the new location of the css file. 2016-03-06 21:52:24 +01:00
Arpad Csanyi 4bc3ebd108 Remove old css file, and add the new, compiled one. 2016-03-06 21:51:08 +01:00
Arpad Csanyi 0fe289661d Make current css file to a sass file.
It will need further optimizations (nesting, variables, ...).
2016-03-06 21:49:01 +01:00
Arpad Csanyi cb1f61b6b6 Add new tasks for compiling sass files. 2016-03-06 21:45:12 +01:00
Arpad Csanyi 39424a2b64 Keymap tile formatting resolves #10.
Probably we will be able to use this "trick" in the final version as
well. Regarding the browser support it's quite good.
2016-03-02 22:27:43 +01:00
Arpad Csanyi e3bf28d2bc Add verbose class names to keymap editor's slides. 2016-02-27 22:14:36 +01:00
Arpad Csanyi 91478c2b3c Implementing basic open/collapse functionality resolves #13. 2016-02-27 22:11:51 +01:00
Arpad Csanyi b590b8030b Resolve #2 by changing stateful colors of the keymap star. 2016-02-18 23:30:49 +01:00
Arpad Csanyi 41a6b095bd Setting overflow to auto fixes #1. 2016-02-18 23:16:45 +01:00
Arpad Csanyi ddc0b4a9dc Add GoogleAnalytics tracking to the app.html page. 2016-02-18 14:12:53 +01:00
Arpad Csanyi 85be54008c Improve theming and layout of the sidebar menu. 2016-02-18 01:37:33 +01:00
Arpad Csanyi f913cbe947 Create basic layout of the Agent's sidebar menu. 2016-02-17 09:50:54 +01:00
Arpad Csanyi f112d898b8 Delete split.js from the bower dependencies. 2016-02-16 23:26:12 +01:00
Arpad Csanyi 7e22531ccd Remove split.js from the agent. 2016-02-16 23:24:14 +01:00
Arpad Csanyi d4172951d3 Add link to the current mockup of the application UI. 2016-02-11 00:22:20 +01:00
Arpad Csanyi 37bac6b57e Add bower components used in the html files. 2016-02-11 00:18:37 +01:00
Arpad Csanyi abaa341c92 Add initial version of the application's UI. 2016-02-11 00:12:14 +01:00
Arpad Csanyi 325e049caf Add new library: OwlCarousel2. 2016-02-11 00:10:42 +01:00
Arpad Csanyi d1e43701de Completely hide the options being disabled. (better UX) 2016-02-11 00:09:14 +01:00
Arpad Csanyi 16232388e3 Create a function for the event handlers of the keypress tab. 2016-02-11 00:08:12 +01:00
Arpad Csanyi 7f04de545b Change icon of the "None" action. 2016-02-11 00:07:33 +01:00
Arpad Csanyi 03b9712ae9 Add Google Tag Manager's code. 2016-01-14 14:12:21 +01:00
Arpad Csanyi e0b9ff67bd Update URLs of README. 2016-01-14 02:01:08 +01:00
Arpad Csanyi 7d807aec42 Add Bootstrap's Glyphicons as it is used at some places. 2016-01-14 01:52:44 +01:00
Arpad Csanyi fc728f3010 Add FontAwesome font files from bower_components. 2016-01-14 01:47:01 +01:00
Arpad Csanyi 5db460073a Add bower_components used by the pages. 2016-01-14 01:45:05 +01:00
Arpad Csanyi 483aa32901 Revert "Add bower_components as it contains the resources used by github pages."
This reverts commit bfffb12f8f.
2016-01-14 01:15:58 +01:00
Arpad Csanyi 4a9e48624c Initial commit of the Macro editor's mockup. 2016-01-14 00:47:13 +01:00
Arpad Csanyi 47ed430847 Initial commit of the Keypress action editor's mockup. 2016-01-14 00:45:19 +01:00
Arpad Csanyi 521dcf4aa6 Add images used on the mockups. 2016-01-14 00:44:03 +01:00
Arpad Csanyi bfffb12f8f Add bower_components as it contains the resources used by github pages. 2016-01-14 00:43:09 +01:00
Arpad Csanyi 7b7b550e1a Add bower's configuration file. 2016-01-14 00:42:42 +01:00
Arpad Csanyi a06716ff8b Add gulpfile with browser-sync. 2016-01-14 00:41:48 +01:00
Arpad Csanyi 4072a58a24 Add README of the repository. 2016-01-13 23:37:32 +01:00
744 changed files with 70312 additions and 4696 deletions
+14
View File
@@ -0,0 +1,14 @@
# editorconfig.org
root = true
[*]
charset = utf-8
indent_size = 4
indent_style = space
endofline = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.json]
indent_size = 2
+9
View File
@@ -0,0 +1,9 @@
node_modules
*-debug.log
.vscode
dist
.idea
*.iml
*.sublime-project
*.sublime-workspace
tmp/
+1
View File
@@ -0,0 +1 @@
12.0.0
+71
View File
@@ -0,0 +1,71 @@
{
"rules": {
"color-hex-case": "lower",
"color-no-invalid-hex": true,
"function-calc-no-unspaced-operator": true,
"function-comma-space-after": "always-single-line",
"function-comma-space-before": "never",
"function-name-case": "lower",
"function-url-quotes": "always",
"function-whitespace-after": "always",
"number-leading-zero": "always",
"number-no-trailing-zeros": true,
"length-zero-no-unit": true,
"number-max-precision": 4,
"no-duplicate-selectors": true,
"no-eol-whitespace": true,
"no-missing-end-of-source-newline": true,
"max-empty-lines": 1,
"indentation": 4,
"string-no-newline": true,
"string-quotes": "single",
"unit-case": "lower",
"unit-no-unknown": true,
"unit-whitelist": ["px", "%", "deg", "ms", "em", "rem", "vh", "vv", "s", "ch"],
"value-list-comma-space-after": "always-single-line",
"value-list-comma-space-before": "never",
"value-no-vendor-prefix": true,
"shorthand-property-no-redundant-values": true,
"property-case": "lower",
"declaration-colon-space-before": "never",
"declaration-colon-space-after": "always",
"declaration-no-important": true,
"declaration-block-no-duplicate-properties": true,
"declaration-block-trailing-semicolon": "always",
"declaration-block-single-line-max-declarations": 1,
"declaration-block-semicolon-space-before": "never",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-block-semicolon-newline-before": "never-multi-line",
"declaration-block-semicolon-newline-after": "always-multi-line",
"block-closing-brace-newline-after": "always",
"block-closing-brace-newline-before": "always",
"block-no-empty": true,
"block-opening-brace-newline-before": ["never-single-line", "never-multi-line"],
"block-opening-brace-newline-after": "always",
"block-opening-brace-space-before": "always",
"selector-attribute-brackets-space-inside": "never",
"selector-attribute-operator-space-after": "never",
"selector-attribute-operator-space-before": "never",
"selector-combinator-space-after": "always",
"selector-combinator-space-before": "always",
"selector-pseudo-class-case": "lower",
"selector-pseudo-class-parentheses-space-inside": "never",
"selector-pseudo-element-case": "lower",
"selector-pseudo-element-colon-notation": "single",
"selector-pseudo-element-no-unknown": true,
"selector-type-case": "lower",
"selector-max-id": 0
}
}
+66
View File
@@ -0,0 +1,66 @@
language: cpp
sudo: false
dist: trusty
env:
global:
- ELECTRON_CACHE=$HOME/.electron
- secure: "JNX+RLuiPeubWwm7KdJBP6ugdHH1TWkmWNvmY4tH5WEhck5zPrLWMUNfAxtyKQRWJXHJis2yR65pYtVThMM4pQ6X2C0qcOy92JWCQ2K5iy9HUNcA7Je3jZABkgiBYo8A1EpiMB/lYMB13GXWT18bMVB0SltVB8fpt29J+fzTaZN+Q19RietjGfKYar3/s9weD8Ky28+dJW1Ge24ALjq3GPwuUZz5qLMGLwH3zbbL1GF81r3ICjWVYA2E+G+JL7+BnHUvyKHs2qGIylrngfe/BbObubCTiTsUgU3LfsRruoWxK4xquvypVrj7nZAOQ7V61ZBQKOxhUMjGazfYSCS1oL09XbPsMCAIGI3v5/GCq4typv/4cgdi2RJlEw6zJC5lAHj8ivVsR55A2Ga65XGxXCoaYqoWv56rzth+4jZP6mrxvepuiSW60pBDUhwTb685WA/5jX6w343AWaXBWIEe4tGORYgujwsKp5AoBzcyuvY/gm34Ii4rYngdog8aWiXwVthCCrRbGiCB9cU929n3nxiXZk4MvQzQQoyLXnwaamK8EyQg4aKx0SQKpUT63XlyKDD6NwqjvyORYe/NIgPng8TZHMKjtmvjoT/rfolAJK2XTPH9vTDU7NsPWIagr7exMxDa1gqeldWwqQW+2veUEVwKNlX2GS+hQ6xR2Q1oU8s="
matrix:
fast_finish: true
include:
- os: osx
osx_image: xcode9.3beta
- os: linux
env: CC=clang CXX=clang++ npm_config_clang=1
compiler: clang
addons:
apt:
sources:
- ubuntu-toolchain-r-test
packages:
- libgnome-keyring-dev
- libsecret-1-dev
- icnsutils
- g++-4.8
- g++-4.8-multilib
- gcc-multilib
- libgtk2.0-0
- libxtst6
- libnotify4
- libgconf2-4
- libgtk2.0-0:i386
- libxtst6:i386
- libnotify4:i386
- libgconf2-4:i386
- libnss3:i386
- libasound2:i386
- libxss1:i386
- socat
- libusb-1.0-0-dev
- libudev-dev
chrome: stable
install:
- nvm install
- npm install
before_script:
- 'if [ ${TRAVIS_OS_NAME} = "linux" ]; then
export DISPLAY=:99.0;
sh -e /etc/init.d/xvfb start;
sleep 3;
fi'
- npm run build
- npm run lint
script:
- set -e
- npm run test
- npm run release
cache:
directories:
- node_modules
-1680
View File
File diff suppressed because it is too large Load Diff
+273
View File
@@ -0,0 +1,273 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is loosely based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
Every Agent version includes the most recent firmware version. See the [firmware changelog](https://github.com/UltimateHackingKeyboard/firmware/blob/master/CHANGELOG.md).
## [1.2.13] - 2019-07-14
Firmware: 8.5.**4** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.5.4)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Implement the Kinetis bootloader protocol natively instead of relying on blhost.
- Fix device recovery mode.
- Correctly display whether the UHK is detected.
- Don't disable input in the key action popover after adding a layer switch action, deleting it, and trying to edit it on its layer.
- Don't change tab immediately upon closing the key action popover.
- Fix UI glitch that occurrs when hitting Tab after updating keymap description.
- Make the Agent icon slightly smaller to be consistent with most application icons.
- Redesign the About page.
- Link the UHK knowledgebase from the help page.
- Make the middle mouse button not open new windows on links in Agent.
- Add top auto-update notification bar.
- Save window state when closing Agent.
- Hide USB usage data in console.
## [1.2.12] - 2018-11-14
Firmware: 8.**5.3** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.5.3)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- When the firmware of the right keyboard half is larger or equal than 8.4.3 then display the "Lock layer when double tapping this key" checkbox and remove "... macro playback is not implemented yet..." notices.
- Upgrade to node-hid 0.7.3 which utilizes the hidraw USB driver on Linux instead of libusb.
- Update udev rules for the new hidraw based node-hid.
- Improve the "Cannot find your UHK" and the privilege escalation screens to show more relevant messages when transitioning from the libusb based node-hid to the hidraw based node-hid.
- Fix the rendering of macro actions, so that their text doesn't overlap.
- Add "International {1,2,3}" and "Language {1,2}" keypress actions.
- Add icon for the Play/Pause keypress action.
- Remove the Stop/Eject keypress action.
- Make the "Type text" macro action accept clipboard data on Mac.
- Display "You can't change this mapping because on the base layer a layer switcher key targets this key." in the key action popover whenever it applies.
- Fix UI bug which could be triggered by tapping Tab in the keymap abbreviation input.
- Don't trigger Agent shortcuts when capturing keypresses.
- Log USB device list before checking permissions.
- Show OS-specific modifiers in the title bar of macro actions.
- Only show the device list on Linux when the list actually changes.
## [1.2.11] - 2018-10-03
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Add backspace and caps lock icons which avoids the overlap of their old texts.
- Fix right and middle mouse click macro actions which were exchanged.
- Include Agent version to the firmware update log.
## [1.2.10] - 2018-09-24
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Add History Back and History Forward scancodes.
- Save the actual decelerated scroll speed instead of using the accelerated scroll speed by accident.
- Allow layer switcher secondary roles only on the base layer.
- When remapping modifiers, display a warning suggesting to remap them on all layers.
- Display more exact instructions on the permission setup screen.
- Set the decelerated scroll speed of the default configuration from 20 to 10.
- Map Caps Lock without Ctrl on default keymaps.
- Rename "Scroll Lock" to "ScrLk" and "Num Lock" to "NumLk" on keys to avoid text overlap.
- In the scancode select2, display "Print Screen SysRq" and add SysRq above PrtScn when rendering the key.
- Fix left and right direction titles for mouse movement macro actions.
## [1.2.9] - 2018-09-13
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Display OS-specific modifiers.
- Display secondary roles.
- Don't trigger "Remap on all layers" after leaving Agent with Alt+Tab.
## [1.2.8] - 2018-08-26
Firmware: 8.**2.5** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Uncheck the "Remap on all keymaps" and "Remap on all layers" checkboxes of the key action popover by default.
- Bind left and right Shift on the Mouse layer of all keymaps in the default configuration.
- Make ng2-select2 widgets faster.
- Add note to the LED brightness page saying that current UHK versions are not backlit.
- Fix the padding of the secondary role tooltip.
- Remove the redundant scrollbar from the LED brightness page.
## [1.2.7] - 2018-07-26
Firmware: 8.4.0 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.4.0)] | Device Protocol: 4.4.0 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Fix Agent startup exception on Linux by upgrading Electron builder.
- Change the shortcut which enables the USB stack test code, so that it can be triggered with the default Mac US keymap.
## [1.2.6] - 2018-07-26
Firmware: 8.**4.0** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.4.0)] | Device Protocol: 4.**4.0** | User Config: 4.0.1 | Hardware Config: 1.0.0
- Replace the Linux blhost binary with a statically compiled version that doesn't use special instructions and shouldn't segfault.
- Keep the current layer when changing keymaps.
- Fix the sleep key of Mac keymaps.
- Add help page.
- Add "save to keyboard" and "remap key" shortcuts.
- Build only AppImages for Linux.
- Replace ng2-select2 widgets with ngx-select-ex that always shows up in the correct position.
- Improve the phrasing of the firmware update error message.
- Tweak unsupported Windows firmware update notification.
- Hide the Settings menu until auto update is implemented.
- Don't scroll when the macro tab of the key action popover gets selected.
- Add keyboard shortcut for enabling the USB stack test mode of the firmware. `DEVICEPROTOCOL:MINOR`
- Tone down the color of the separator line.
## [1.2.5] - 2018-06-26
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.3.1 | User Config: 4.0.1 | Hardware Config: 1.0.0
- When remapping a switch keymap action on all keymaps, don't set it on its own keymap.
- Make the key action popover always contain the action of the current key, even after cancelled.
- Include the firmware version to be updated to the firmware update log.
- Update the Agent icon of the side menu and the about page.
- When remapping a key, only flash the affected key instead of all keys.
- Fade in/out the keyboard separator line only when splitting the keyboard.
- Only show the unsupported OS message of the firmware page on relevant Windows versions.
- Close and reopen USB device when an error occurs.
- Temporarily remove the export keymap feature because it's useless until import is implemented.
## [1.2.4] - 2018-06-21
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.3.1 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Replace Linux x86-64 blhost with a statically linked version which should make firmware updates work on every Linux distro.
## [1.2.3] - 2018-06-19
Firmware: 8.2.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.3.1 | User Config: 4.0.1 | Hardware Config: 1.0.0
- Add checkboxes for remapping keys on all layers and/or all keymaps.
- Add separator line between the keyboard halves.
- Add double tap icon for switch layer actions.
- Improve the looks and content of the tooltips of the key action popover.
- Make the left keyboard half less likely to timeout during firmware update.
- Terminate the firmware update process if blhost segfaults.
- Replace the Linux x86-64 version of the blhost binary which should not make it segfault anymore.
- Make the firmware update log shorter by listing one device per line and not repeating the list of available USB devices.
- Make the firmware update help text shorter.
## [1.2.2] - 2018-05-27
Firmware: 8.2.**5** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.5)] | Device Protocol: 4.3.**1** | User Config: 4.0.1 | Hardware Config: 1.0.0
- Offer recovery for bricked right keyboard halfs.
- Detect when the hardware configuration of a device is invalid and display a notification. `DEVICEPROTOCOL:PATCH`
- Check if the keyboard is in factory reset mode and if so, display a relevant instruction.
- Only allow ASCII characters in type text macro actions.
- Allow uploading the same file multiple times in a row.
- Only send auto update notification when the user initiates the update.
- Update the firmware versions on the firmware update page right after firmware updates.
- Add a lot of useful instructions to the firmware page to help users update the firmware.
- Add the operating system and initial device list to the firmware update log.
- Add copy to clipboard button to the top right corner of the firmware update terminal widget.
## [1.2.1] - 2018-05-12
Firmware: 8.2.**2** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.2)] | Device Protocol: 4.3.0 | User Config: 4.0.**1** | Hardware Config: 1.0.0
- Match for the new USB usage page and usage number. This is critical for UHKs flashed with firmware >=8.2.2 to be recognized by Agent on OSX.
- Make the config serializer handle long media macro actions. `USERCONFIG:PATCH`
- Add note on the macro page explaining that the macro engine of the firmware is not ready yet.
- Add an example to the scancode tooltip to better explain users how to invoke non-US characters.
## [1.2.0] - 2018-04-20
Firmware: 8.**2.0** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.2.0)] | Device Protocol: 4.**3.0** | User Config: 4.0.0 | Hardware Config: 1.0.0
- Tweak the default mouse speed. This was necessary because the last firmware version adjusted speed multipliers. The mouse speed can be reset via the "Reset speeds to default" button of the "Mouse speed" page.
- Make the newly added switch-keymap.js script utilize the new UsbCommandId_SwitchKeymap, allowing for programmatic keymap switching. `DEVICEPROTOCOL:MINOR`
## [1.1.5] - 2018-04-10
Firmware: 8.1.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.5)] | Device Protocol: 4.2.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Don't allow to run multiple instances of Agent at the same time, but rather focus the already existing Agent window.
## [1.1.4] - 2018-04-09
Firmware: 8.1.5 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.5)] | Device Protocol: 4.2.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Handle privilege escalation gracefully on Linux even without PolicyKit.
- Fix application icon path.
- Replace application icon with a diagonal gradient based icon that should look better on desktop.
- Make saving the configuration more robust, and add a configuration recovery screen.
- Reposition the ISO key in the scancode list.
## [1.1.3] - 2018-04-06
Firmware: 8.1.**5** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.5)] | Device Protocol: 4.2.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Show the firmware versions of the left and right keyboard halves on the firmware page.
- Fix menu scancode.
- Make the tooltip text regarding non-US characters easier to understand.
- On the Device Configuration page change terminology from download/upload to export/import for greater clarity.
## [1.1.2] - 2018-03-09
Firmware: 8.1.**4** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.4)] | Device Protocol: 4.2.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Fix the configuration serializer so that the correct key actions get serialized, and the save button always appears when needed.
- Add instructions to the firmware page to aid users.
- Fix code signing on OSX.
- Sign Agent on Windows.
## [1.1.1] - 2018-02-13
Firmware: 8.1.**2** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.2)] | Device Protocol: 4.2.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Sign Agent on OSX resulting in easier installation.
- Add per-keymap description field.
- Sort keymaps and macros alphabetically within the key action popover.
- Add tooltip regarding non-US scancodes.
- When deleting a macro, also delete the relevant play macro actions.
- Make the reset configuration button persist the reset configuration in Agent-web.
- Make Agent able to unbrick bricked modules.
- Assign "switch to test keymap" action on all keymaps in the default configuration.
- Add keymap descriptions in the default configuration.
## [1.1.0] - 2018-01-15
Firmware: 8.**1**.0 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.1.0)] | Device Protocol: 4.**2.0** | User Config: 4.0.0 | Hardware Config: 1.0.0
- Only accept device, keymap, and macro names upon editing if their trimmed length is non-zero.
- Add diagnostics USB scripts, most notably /packages/usb/{get-i2c-health,set-i2c-baud-rate}.js, some utilizing new device protocol commands and properties. `DEVICEPROTOCOL:MINOR`
- Implement the Device -> Upload device configuration feature.
- Make update-module-firmware.js more robust and able to recover bricked modules (including the left half) by utilizing the newly added wait-for-kboot-idle.js. `DEVICEPROTOCOL:MINOR`
- Add the Agent -> About page containing the version number of Agent.
- On the mouse speed section of the key action popover, remove the now incorrect bottom sentence and slightly rephrase the top sentence.
- Remove --buspal speed specification argument because it gets disrespected by the firmware anyways.
- Fix get-left-firmware-version.js to display the correct firmware version.
## [1.0.4] - 2017-12-30
Firmware: 8.0.0 [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.0.0)] | Device Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Add mouse speed settings.
## [1.0.3] - 2017-12-28
Firmware: 8.0.**0** [[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.0.0)] | Device Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Add LED brightness settings.
- Some key actions, for example Left Arrow were displayed as text with modifiers and as icon without modifires. Now, they're always displayed as icons.
- Clean up firmware update console messages a bit.
- Remove the add keymap button because this feature is not only useless but confusing until it gets reimplemented.
- Explicitly mention on the macro tab of the key action popover that macro playback is not implemented yet.
- Downgrade to firmware 8.0.0 because the left I2C watchdog of firmware 8.0.1 is not proven yet.
## [1.0.2] - 2017-12-25
Firmware: **8.0.1**[[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v8.0.1)] | Device Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Fix firmware upgrade on Linux.
## [1.0.1] - 2017-12-22
Firmware: 7.0.0[[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v7.0.0)] | Device Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- Fix Linux privilege escalation when udev rules aren't set up.
## [1.0.0] - 2017-12-14
Firmware: **7**.0.0[[release](https://github.com/UltimateHackingKeyboard/firmware/releases/tag/v7.0.0)] | Device Protocol: 4.0.0 | User Config: 4.0.0 | Hardware Config: 1.0.0
- First release
+37
View File
@@ -0,0 +1,37 @@
# Signing the CLA
Before contributing to this project, you must sign [the CLA](/cla/cla-1.0.0.md).
To sign the CLA, add your GitHub username to the end of the CLA. Make sure that the usernames remain alphabetically sorted.
Then create a pull request with the title:
> Sign CLA
and with the body:
> I have read the Agreement, and fully agree to it by signing it with my GitHub username.
# Bug reports
If the build process fails, please open a [new issue](https://github.com/UltimateHackingKeyboard/agent/issues/new) containing the complete build log.
If the build process succeeds but Agent fails at runtime, it's most likely due to a JavaScript error. In this case, please open a [new issue](https://github.com/UltimateHackingKeyboard/agent/issues/new) containing the error displayed by the JavaScript console.
# Contributing instructions
Contributors are most welcome and appreciated beyond words!
1. Please pick an [issue](https://github.com/UltimateHackingKeyboard/agent/issues) of your interest, or open a new one.
2. Let us know in the issue what you're about to do.
3. We let you know if somebody is already working on the issue, and thank you for being awesome for considering to contribute.
4. Send a pull request of your contribution. You're welcome to send the PR early on even if it's incomplete. This way, we'll be able to provide early feedback which will save time for everyone involved.
5. Fix your PR if needed, and make sure that it passes continuous integration tests. If everything looks good we'll merge your PR, and pop a bottle of champagne to celebrate you!
## Add icon to uhk-icon set
1. Copy svg file(s) to packages/uhk-web/src/svgs/icons folder
2. run `$ npm run sprites`
The icon available as .uhk-icon-<filename without extension> css selector.
+10
View File
@@ -0,0 +1,10 @@
Before submitting a new issue, make sure to do the following:
1. If you're using Karabiner Elements on your Mac, close it!
2. Install the latest Agent:
https://github.com/UltimateHackingKeyboard/agent/releases/latest
3. Use Agent to update to the latest firmware:
https://github.com/UltimateHackingKeyboard/firmware/releases/latest
4. Try to reproduce the issue, and only report it if it still persists.
`npm audit` related issues will be closed due to https://github.com/UltimateHackingKeyboard/agent/blob/master/NPM_UPDATES.md
+674
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -0,0 +1,8 @@
We get requests from time to time to update our NPM dependencies because they contain vulnerabilities according to `npm audit`. Such issues will be closed without further consideration due to the following reasons:
1. Usually, the affected packages are not runtime dependencies of Agent, but devDependencies which are only needed for developing Agent.
2. Often times, 3rd party packages are affected by vulnerabilities which we cannot fix.
3. We can't just blindly update all of the packages because that'd likely break Agent as it has happened in the past. Each of the updates must be carefully tested, and we don't have the manpower to do it on a daily basis.
4. Sometimes `npm audit` signals false vulnerabilities.
We routinely update our dependencies on a best effort basis.
+43
View File
@@ -0,0 +1,43 @@
![Agent logo & text](https://raw.githubusercontent.com/UltimateHackingKeyboard/agent/master/packages/uhk-web/src/assets/images/agent-logo-with-text.png)
[![Build Status](https://travis-ci.org/UltimateHackingKeyboard/agent.svg?branch=master)](https://travis-ci.org/UltimateHackingKeyboard/agent)
[![Build status](https://ci.appveyor.com/api/projects/status/4flvi969t4lgwwk6?svg=true)](https://ci.appveyor.com/project/mondalaci/agent)
Agent is the configuration application of the [Ultimate Hacking Keyboard](https://ultimatehackingkeyboard.com/).
* Try out the [web build of Agent](http://ultimatehackingkeyboard.github.io/agent/) in your browser. This is meant to be used for demonstration purposes.
* Download the [desktop build of Agent](https://github.com/UltimateHackingKeyboard/agent/releases) from our releases page. Use this if you have an actual UHK at hand, or else you won't get past the opening screen!
## Building the electron application
### Step 1: Build Dependencies
You'll need Node.js LTS. Use your OS package manager to install it. [Check the NodeJS site for more info.](https://nodejs.org/en/download/package-manager/ "Installing Node.js via package manager") Mac OS users can simply `brew install node` to get both. Should you need multiple Node.js versions on the same computer, use Node Version Manager for [Mac/Linux](https://github.com/creationix/nvm) or for [Windows](https://github.com/coreybutler/nvm-windows)
You'll also need `libusb`.
On debian-based linux distros, `apt-get install libusb-dev libudev-dev g++` is sufficient.
On Mac OS, use `brew install libusb libusb-compat`.
For everyone else, use the appropriate package manager for your OS.
### Step 2: Build Environment
```
git clone git@github.com:UltimateHackingKeyboard/agent.git
cd agent
npm install
npm run build
npm run electron
```
At this point, Agent should be running on your machine.
## Developing the web application
- The frontend code is located in `packages/uhk-web/`
- Run the project locally with `npm run server:web`
- View the app at `http://localhost:8080`
- The app will automatically reload when you make changes
## Contributing
Wanna contribute? Please let us show you [how](CONTRIBUTING.md).
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

@@ -1,41 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
version="1.1"
id="svg2"
viewBox="-5 -5 49.822906 12.159602"
height="18.239403"
width="74.73436">
<path
id="path4"
style="fill:#000000"
d="M -3,-5 C -4.108,-5 -5,-4.108 -5,-3 L -5,3 C -5,4.108 -4.108,5 -3,5 L 3,5 C 4.108,5 5,4.108 5,3 L 5,-3 C 5,-4.108 4.108,-5 3,-5 L -3,-5 Z M -4.0833333,-2.5 C -4.0364583,-2.5078125 -4,-2.5 -4,-2.5 L -0.99999998,-2.5 C -0.74999998,-2.5 -0.49999998,-2.25 -0.49999998,-2.25 -0.49999998,-2.25 -0.24999998,-2 2.4999999e-8,-2 0.25000003,-2 0.50000003,-2.25 0.50000003,-2.25 0.50000003,-2.25 0.75000003,-2.5 1,-2.5 L 4,-2.5 C 4.5,-2.5 4.5,-2 4.5,-2 L 4.5,-0.99999998 C 4.5,0.50000003 3.5,0.50000003 3.5,0.50000003 L 1,0.50000003 C 0.75000003,0.50000003 0.50000003,-0.24999998 0.50000003,-0.24999998 0.50000003,-0.24999998 0.25000003,-0.99999998 2.4999999e-8,-0.99999998 -0.24999998,-0.99999998 -0.49999998,-0.24999998 -0.49999998,-0.24999998 -0.49999998,-0.24999998 -0.74999998,0.50000003 -0.99999998,0.50000003 L -3.5,0.50000003 C -3.5,0.50000003 -4.5,0.50000003 -4.5,-0.99999998 L -4.5,-2 C -4.5,-2.375 -4.2239583,-2.4765625 -4.0833333,-2.5 Z" />
<g
id="text3338"
style="font-style:normal;font-weight:normal;font-size:13.33333302px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1">
<path
id="path3343"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.83333302px;font-family:Zekton;-inkscape-font-specification:'Zekton Bold'"
d="M 13.8736,1.4179352 16.1811,1.4179352 14.740267,-2.297898 11.8911,4.9929351 10.3636,4.9929351 14.155267,-4.5403979 15.3361,-4.5403979 19.149433,4.9929351 17.6111,4.9929351 16.744433,2.8262685 13.310267,2.8262685 13.8736,1.4179352 Z" />
<path
id="path3345"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.83333302px;font-family:Zekton;-inkscape-font-specification:'Zekton Bold'"
d="M 24.13886,5.7512684 Q 24.78886,5.7512684 24.78886,5.1012684 L 24.78886,0.22626858 Q 24.78886,-0.4237314 24.13886,-0.4237314 L 21.972193,-0.4237314 Q 21.322193,-0.4237314 21.322193,0.22626858 L 21.322193,2.9346018 Q 21.322193,3.5846018 21.972193,3.5846018 L 24.355527,3.5846018 24.355527,4.9929351 21.972193,4.9929351 Q 19.91386,4.9929351 19.91386,2.9346018 L 19.91386,0.22626858 Q 19.91386,-1.8320647 21.972193,-1.8320647 L 24.13886,-1.8320647 Q 26.197193,-1.8320647 26.197193,0.22626858 L 26.197193,5.1012684 Q 26.197193,7.1596017 24.13886,7.1596017 L 21.53886,7.1596017 21.53886,5.7512684 24.13886,5.7512684 Z" />
<path
id="path3347"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.83333302px;font-family:Zekton;-inkscape-font-specification:'Zekton Bold'"
d="M 33.018808,3.5846018 33.018808,4.9929351 29.335475,4.9929351 Q 27.277141,4.9929351 27.277141,2.9346018 L 27.277141,0.22626858 Q 27.277141,-1.8320647 29.335475,-1.8320647 L 31.502141,-1.8320647 Q 33.560474,-1.8320647 33.560474,0.22626858 L 33.560474,0.24793524 Q 33.560474,2.2846019 31.502141,2.2846019 L 29.118808,2.2846019 29.118808,0.87626856 31.502141,0.87626856 Q 32.152141,0.87626856 32.152141,0.24793524 L 32.152141,0.22626858 Q 32.152141,-0.4237314 31.502141,-0.4237314 L 29.335475,-0.4237314 Q 28.685475,-0.4237314 28.685475,0.22626858 L 28.685475,2.9346018 Q 28.685475,3.5846018 29.335475,3.5846018 L 33.018808,3.5846018 Z" />
<path
id="path3349"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.83333302px;font-family:Zekton;-inkscape-font-specification:'Zekton Bold'"
d="M 40.817961,4.9929351 39.409627,4.9929351 39.409627,0.22626858 Q 39.409627,-0.4237314 38.759627,-0.4237314 L 35.942961,-0.4237314 35.942961,4.9929351 34.534628,4.9929351 34.534628,-1.8320647 38.759627,-1.8320647 Q 40.817961,-1.8320647 40.817961,0.22626858 L 40.817961,4.9929351 Z" />
<path
id="path3351"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:10.83333302px;font-family:Zekton;-inkscape-font-specification:'Zekton Bold'"
d="M 41.789576,-1.8320647 42.331242,-1.8320647 42.331242,-4.5403979 43.663742,-4.5403979 43.663742,-1.8320647 44.822909,-1.8320647 44.822909,-0.4237314 43.663742,-0.4237314 43.663742,4.9929351 42.331242,4.9929351 42.331242,-0.4237314 41.789576,-0.4237314 41.789576,-1.8320647 Z" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

+36
View File
@@ -0,0 +1,36 @@
os: unstable
clone_folder: c:\projects\uhk-agent
environment:
GH_TOKEN:
secure: 3IebpEKmC39codi1wT6dXx8mql4/mCL1JzZ7lir7GQ5MWRnCxlED2OXbiKHHigDV
CSC_LINK: c:\projects\uhk-agent\scripts\certs\windows-cert.p12
matrix:
- nodejs_version: "12.0.0"
cache:
- node_modules -> package.json
matrix:
fast_finish: true
build: off
shallow_clone: true
install:
- ps: Install-Product node $env:nodejs_version
- choco install chromium
- set CI=true
- set PATH=%APPDATA%\npm;%PATH%
- node -v
- npm -v
- appveyor-retry npm install
test_script:
- appveyor-retry npm run build
- npm run lint
- set CHROME_BIN="C:\Program Files (x86)\Chromium\Application\chrome.exe"
- npm run test
- npm run release
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

+112
View File
@@ -0,0 +1,112 @@
# Contributor Agreement
## Individual Contributor Exclusive License Agreement version 1.0.0
Thank you for your interest in contributing to Ultimate Gadget Laboratories Kft.'s Ultimate Hacking Keyboard Agent ("We" or "Us").
The purpose of this contributor agreement ("Agreement") is to clarify and document the rights granted by contributors to Us.
By signing this Agreement, you agree that the following terms apply to all of your past, present and future contributions to the project.
## How to use this Contributor Agreement
If You are an employee and have created the Contribution as part of your employment, You need to have Your employer approve this Agreement or sign the Entity version of this document. If You do not own the Copyright in the entire work of authorship, any other author of the Contribution should also sign this in any event, please contact Us at support@UltimateHackingKeyboard.com
## 1. Definitions
**"You"** means the individual Copyright owner who Submits a Contribution to Us.
**"Contribution"** means any original work of authorship, including any original modifications or additions to an existing work of authorship, Submitted by You to Us, in which You own the Copyright.
**"Copyright"** means all rights protecting works of authorship, including copyright, moral and neighboring rights, as appropriate, for the full term of their existence.
**"Material"** means the software or documentation made available by Us to third parties. When this Agreement covers more than one software project, the Material means the software or documentation to which the Contribution was Submitted. After You Submit the Contribution, it may be included in the Material.
**"Submit"** means any act by which a Contribution is transferred to Us by You by means of tangible or intangible media, including but not limited to electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, Us, but excluding any transfer that is conspicuously marked or otherwise designated in writing by You as "Not a Contribution."
**"Documentation"** means any non-software portion of a Contribution.
## 2. License grant
### 2.1 Copyright license to Us
Subject to the terms and conditions of this Agreement, You hereby grant to Us a worldwide, royalty-free, exclusive, perpetual and irrevocable (except as stated in Section 8.2) license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to:
* publish the Contribution,
* modify the Contribution,
* prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials,
* reproduce the Contribution in original or modified form,
* distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form.
### 2.2 Moral rights
Moral Rights remain unaffected to the extent they are recognized and not waivable by applicable law.
### 2.3 Copyright license back to You
Upon such grant of rights to Us, We immediately grant to You a worldwide, royalty-free, non-exclusive, perpetual and irrevocable license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, under the Copyright covering the Contribution to use the Contribution by all means, including, but not limited to:
* publish the Contribution,
* modify the Contribution,
* prepare derivative works based upon or containing the Contribution and/or to combine the Contribution with other Materials,
* reproduce the Contribution in original or modified form,
* distribute, to make the Contribution available to the public, display and publicly perform the Contribution in original or modified form.
This license back is limited to the Contribution and does not provide any rights to the Material.
## 3. Patents
### 3.1 Patent license
Subject to the terms and conditions of this Agreement You hereby grant to Us and to recipients of Materials distributed by Us a worldwide, royalty-free, non-exclusive, perpetual and irrevocable (except as stated in Section 3.2) patent license, with the right to transfer an unlimited number of non-exclusive licenses or to grant sublicenses to third parties, to make, have made, use, sell, offer for sale, import and otherwise transfer the Contribution and the Contribution in combination with any Material (and portions of such combination). This license applies to all patents owned or controlled by You, whether already acquired or hereafter acquired, that would be infringed by making, having made, using, selling, offering for sale, importing or otherwise transferring of Your Contribution(s) alone or by combination of Your Contribution(s) with any Material.
### 3.2 Revocation of patent license
You reserve the right to revoke the patent license stated in section 3.1 if We make any infringement claim that is targeted at your Contribution and not asserted for a Defensive Purpose. An assertion of claims of the Patents shall be considered for a "Defensive Purpose" if the claims are asserted against an entity that has filed, maintained, threatened, or voluntarily participated in a patent infringement lawsuit against Us or any of Our licensees.
## 4. Disclaimer
THE CONTRIBUTION IS PROVIDED "AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF SATISFACTORY QUALITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH WARRANTY IS LIMITED IN DURATION AND EXTENT TO THE MINIMUM PERIOD AND EXTENT PERMITTED BY LAW.
## 5. Consequential damage waiver
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR WE BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA, INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT OR OTHERWISE) UPON WHICH THE CLAIM IS BASED.
## 6. Approximation of disclaimer and damage waiver
IF THE DISCLAIMER AND DAMAGE WAIVER MENTIONED IN SECTION 4. AND SECTION 5. CANNOT BE GIVEN LEGAL EFFECT UNDER APPLICABLE LOCAL LAW, REVIEWING COURTS SHALL APPLY LOCAL LAW THAT MOST CLOSELY APPROXIMATES AN ABSOLUTE WAIVER OF ALL CIVIL OR CONTRACTUAL LIABILITY IN CONNECTION WITH THE CONTRIBUTION.
## 7. Term
7.1 This Agreement shall come into effect upon Your acceptance of the terms and conditions.
7.2 In the event of a termination of this Agreement Sections 4, 5, 6, 7 and 8 shall survive such termination and shall remain in full force thereafter. For the avoidance of doubt, (sub)licenses that have already been granted for Contributions at the date of the termination shall remain in full force after the termination of this Agreement.
## 8. Miscellaneous
8.1 This Agreement and all disputes, claims, actions, suits or other proceedings arising out of this agreement or relating in any way to it shall be governed by the laws of Hungary excluding its private international law provisions.
8.2 This Agreement sets out the entire agreement between You and Us for Your Contributions to Us and overrides all other agreements or understandings.
8.3 In case of Your death, this agreement shall continue with Your heirs. In case of more than one heir, all heirs must exercise their rights through a commonly authorized person.
8.4 If any provision of this Agreement is found void and unenforceable, such provision will be replaced to the extent possible with a provision that comes closest to the meaning of the original provision and that is enforceable. The terms and conditions set forth in this Agreement shall apply notwithstanding any failure of essential purpose of this Agreement or any limited remedy to the maximum extent possible under law.
8.5 You agree to notify Us of any facts or circumstances of which you become aware that would make this Agreement inaccurate in any respect.
## 9. Signatures
I have read this Agreement, and fully agree to it by signing it with my GitHub username:
- @attilacsanyi
- @cokert
- @csanyiarpad
- @dgyimesi
- @eltang
- @ert78gb
- @fjozsef
- @laxu
- @mondalaci
- @NejcZdovc
- @spuder
- @srang
- @Lauszus
Binary file not shown.
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,288 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata></metadata>
<defs>
<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
<font-face units-per-em="1200" ascent="960" descent="-240" />
<missing-glyph horiz-adv-x="500" />
<glyph horiz-adv-x="0" />
<glyph horiz-adv-x="400" />
<glyph unicode=" " />
<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xa0;" />
<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
<glyph unicode="&#x2000;" horiz-adv-x="650" />
<glyph unicode="&#x2001;" horiz-adv-x="1300" />
<glyph unicode="&#x2002;" horiz-adv-x="650" />
<glyph unicode="&#x2003;" horiz-adv-x="1300" />
<glyph unicode="&#x2004;" horiz-adv-x="433" />
<glyph unicode="&#x2005;" horiz-adv-x="325" />
<glyph unicode="&#x2006;" horiz-adv-x="216" />
<glyph unicode="&#x2007;" horiz-adv-x="216" />
<glyph unicode="&#x2008;" horiz-adv-x="162" />
<glyph unicode="&#x2009;" horiz-adv-x="260" />
<glyph unicode="&#x200a;" horiz-adv-x="72" />
<glyph unicode="&#x202f;" horiz-adv-x="260" />
<glyph unicode="&#x205f;" horiz-adv-x="325" />
<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 106 KiB

+7
View File
@@ -0,0 +1,7 @@
{
"lerna": "2.0.0",
"packages": [
"packages/*"
],
"version": "1.0.0"
}
File diff suppressed because one or more lines are too long
+17134
View File
File diff suppressed because it is too large Load Diff
+107
View File
@@ -0,0 +1,107 @@
{
"name": "uhk-agent",
"private": true,
"author": "Ultimate Gadget Laboratories",
"main": "electron/dist/electron-main.js",
"version": "1.2.13",
"firmwareVersion": "8.5.4",
"deviceProtocolVersion": "4.4.0",
"userConfigVersion": "4.0.1",
"hardwareConfigVersion": "1.0.0",
"description": "Agent is the configuration application of the Ultimate Hacking Keyboard.",
"repository": {
"type": "git",
"url": "git@github.com:UltimateHackingKeyboard/agent.git"
},
"license": "GPL-3.0",
"engines": {
"node": ">=12.0.0 <13.0.0",
"npm": ">=6.9.0 <7.0.0"
},
"devDependencies": {
"@types/decompress": "4.2.3",
"@types/electron-devtools-installer": "2.0.2",
"@types/electron-settings": "3.0.0",
"@types/file-saver": "0.0.1",
"@types/fs-extra": "8.0.0",
"@types/jasmine": "3.3.12",
"@types/jasminewd2": "2.0.3",
"@types/jquery": "3.3.29",
"@types/jsonfile": "4.0.1",
"@types/lodash": "4.14.136",
"@types/node": "8.0.53",
"@types/node-hid": "0.7.0",
"@types/request": "2.0.8",
"@types/semver": "5.5.0",
"@types/tmp": "0.0.33",
"autoprefixer": "6.5.3",
"buffer": "5.0.6",
"check-node-version": "^3.2.0",
"copy-webpack-plugin": "5.0.0",
"copyfiles": "^2.0.0",
"core-js": "2.4.1",
"cross-env": "5.0.5",
"decompress": "4.2.0",
"decompress-tarbz2": "4.1.1",
"devtron": "1.4.0",
"electron": "5.0.9",
"electron-builder": "20.34.0",
"electron-debug": "1.5.0",
"electron-devtools-installer": "2.2.3",
"electron-log": "2.2.16",
"electron-rebuild": "1.8.5",
"electron-settings": "3.1.4",
"electron-updater": "2.21.4",
"exports-loader": "0.6.3",
"file-loader": "0.10.0",
"fs-extra": "8.1.0",
"gh-pages": "2.0.1",
"html-webpack-plugin": "3.2.0",
"jasmine": "3.4.0",
"jasmine-core": "3.4.0",
"jasmine-node": "3.0.0",
"jasmine-ts": "0.3.0",
"jsonfile": "4.0.0",
"lerna": "3.16.4",
"lodash": "4.17.15",
"node-hid": "0.7.9",
"npm-run-all": "4.0.2",
"nrf-intel-hex": "1.3.0",
"postcss-url": "8.0.0",
"pre-commit": "1.2.2",
"request": "2.88.0",
"rimraf": "2.6.1",
"source-map-support": "0.5.9",
"stylelint": "10.0.0",
"svg-sprite": "1.5.0",
"ts-loader": "5.3.3",
"ts-node": "8.3.0",
"tslint": "5.18.0",
"typescript": "3.5.3",
"webpack": "4.29.5",
"webpack-cli": "3.2.3"
},
"pre-commit": [
"precommit-msg"
],
"scripts": {
"postinstall": "lerna bootstrap",
"precommit-msg": "Git precommit hook is running... & exit 0",
"test": "lerna run test",
"lint": "lerna run lint",
"e2e": "lerna run e2e --scope uhk-web",
"prebuild": "check-node-version --package",
"build": "lerna run build",
"server:web": "lerna exec --scope uhk-web npm start",
"server:electron": "lerna exec --scope uhk-web npm run server:renderer",
"electron": "lerna exec --scope uhk-agent npm start",
"electron:spe": "lerna exec --scope uhk-agent npm run electron:spe",
"pack": "node ./scripts/release.js",
"sprites": "node ./scripts/generate-svg-sprites",
"release": "node ./scripts/release.js",
"clean": "lerna exec rimraf ./node_modules ./dist && rimraf ./node_modules ./dist ./tmp",
"predeploy-gh-pages": "lerna run build:web --scope=uhk-web",
"deploy-gh-pages": "gh-pages -d packages/uhk-web/dist",
"convert-user-config-to-bin": "node -r ts-node/register ./packages/usb/user-config-json-to-bin.ts"
}
}
+1
View File
@@ -0,0 +1 @@
export * from './src';
+8
View File
@@ -0,0 +1,8 @@
{
"spec_dir": "test",
"spec_files": [
"**/*[sS]pec.ts"
],
"stopSpecOnExpectationFailure": true,
"random": false
}
+532
View File
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
{
"name": "kboot",
"main": "dist/index.js",
"version": "0.0.0",
"description": "Javascript implementation of the Kinetis Bootloader protocol",
"author": "Ultimate Gadget Laboratories",
"repository": {
"type": "git",
"url": "git@github.com:UltimateHackingKeyboard/agent.git"
},
"license": "GPL-3.0",
"dependencies": {
"debug": "^4.1.1",
"byte-data": "^16.0.3",
"tslib": "^1.10.0",
"node-hid": ">= 0.7.9"
},
"peer-dependencies": {},
"scripts": {
"build": "tsc --project ./src/tsconfig.json",
"lint": "tslint --project tsconfig.json"
}
}
+65
View File
@@ -0,0 +1,65 @@
Javascript implementation of the Kinetis Bootloader protocol
============================================================
Based on the [Kinetis Bootloader v2.0.0 Reference Manual](https://github.com/UltimateHackingKeyboard/bootloader/blob/master/doc/Kinetis%20Bootloader%20v2.0.0%20Reference%20Manual.pdf)
## Supported communication channels/protocols
- [x] USB
- [ ] I2C
- [ ] SPI
- [ ] CAN
- [ ] UART
## Supported Commands
We implemented only the commands that is used in UHK software.
If someone needs other commands, (s)he can easily implement it based on existing.
- [x] GetProperty
- [ ] SetProperty
- [ ] FlashEraseAll
- [x] FlashEraseRegion
- [x] FlashEraseAllUnsecure
- [x] ReadMemory
- [x] WriteMemory
- [ ] FillMemory
- [x] FlashSecurityDisable
- [ ] Execute
- [ ] Call
- [x] Reset
- [ ] FlashProgramOnce
- [ ] FlashReadOnce
- [ ] FlashReadResource
- [ ] ConfigureQuadSpi
- [ ] ReliableUpdate
- [x] ConfigureI2c
- [ ] ConfigureSpi
- [ ] ConfigureCan
## How to use
```Typescript
// Initialize peripheral
const usbPeripheral = new UsbPeripheral({ productId: 1, vendorId: 1 });
// Initialize Kboot
const kboot = new KBoot(usbPeripheral);
// Call the command
const version = await kboot.getBootloaderVersion();
// ... more commands
// Close the communication channel. Release resources
kboot.close();
```
If you have to communicate other I2C device over USB call `kboot.configureI2c(i2cId)` before the command.
```Typescript
const usbPeripheral = new UsbPeripheral({ productId: 1, vendorId: 1 });
const kboot = new KBoot(usbPeripheral);
// Get the bootloader version of I2C device
await kboot.configureI2c(i2cId);
const version = await kboot.getBootloaderVersion();
```
## TODO
- [ ] Improve exception handling
+2
View File
@@ -0,0 +1,2 @@
export const DEFAULT_USB_PID = 0x0073;
export const DEFAULT_USB_VID = 0x15A2;
+23
View File
@@ -0,0 +1,23 @@
export enum Commands {
FlashEraseAll = 0x01,
FlashEraseRegion = 0x02,
ReadMemory = 0x03,
WriteMemory = 0x04,
FillMemory = 0x05,
FlashSecurityDisable = 0x06,
GetProperty = 0x07,
ReceiveSBFile = 0x08,
Execute = 0x09,
Call = 0x0A,
Reset = 0x0B,
SetProperty = 0x0C,
FlashEraseAllUnsecure = 0x0D,
FlashProgramOnce = 0x0E,
FlashReadOnce = 0x0F,
FlashReadResource = 0x10,
ConfigureQuadSpi = 0x11,
ReliableUpdate = 0x12,
ConfigureI2c = 0xc1,
ConfigureSpi = 0xc2,
ConfigureCan = 0xc3
}
+5
View File
@@ -0,0 +1,5 @@
export * from './commands';
export * from './memory-ids';
export * from './properties';
export * from './response-codes';
export * from './response-tags';
+5
View File
@@ -0,0 +1,5 @@
export enum MemoryIds {
Internal = 0,
Spi0 = 1,
ExecuteOnly = 0x10
}
+26
View File
@@ -0,0 +1,26 @@
export enum Properties {
BootloaderVersion = 0x01,
AvailablePeripherals = 0x02,
FlashStartAddress = 0x03,
FlashSize = 0x04,
FlashSectorSize = 0x05,
FlashBlockCount = 0x06,
AvailableCommands = 0x07,
CrcCheckStatus = 0x08,
VerifyWrites = 0x0A,
MaxPacketSize = 0x0B,
ReservedRegions = 0x0C,
ValidateRegions = 0x0D,
RAMStartAddress = 0x0E,
RAMSize = 0x0F,
SystemDeviceIdent = 0x10,
FlashSecurityState = 0x11,
UniqueDeviceIdent = 0x12,
FlashFacSupport = 0x13,
FlashAccessSegmentSize = 0x14,
FlashAccessSegmentCount = 0x15,
FlashReadMargin = 0x16,
QspiInitStatus = 0x17,
TargetVersion = 0x18,
ExternalMemoryAttributes = 0x19
}
@@ -0,0 +1,76 @@
export enum ResponseCodes {
// Generic status codes.
Success = 0,
Fail = 1,
ReadOnly = 2,
OutOfRange = 3,
InvalidArgument = 4,
// Flash driver errors.
FlashSizeError = 100,
FlashAlignmentError = 101,
FlashAddressError = 102,
FlashAccessError = 103,
FlashProtectionViolation = 104,
FlashCommandFailure = 105,
FlashUnknownProperty = 106,
// I2C driver errors.
I2C_SlaveTxUnderrun = 200,
I2C_SlaveRxOverrun = 201,
I2C_AribtrationLost = 202,
// SPI driver errors.
SPI_SlaveTxUnderrun = 300,
SPI_SlaveRxOverrun = 301,
// QuadSPI driver errors
QSPI_FlashSizeError = 400,
QSPI_FlashAlignmentError = 401,
QSPI_FlashAddressError = 402,
QSPI_FlashCommandFailure = 403,
QSPI_FlashUnknownProperty = 404,
QSPI_NotConfigured = 405,
QSPI_CommandNotSupported = 406,
// Bootloader errors.
UnknownCommand = 10000,
SecurityViolation = 10001,
AbortDataPhase = 10002,
PingError = 10003,
NoResponse = 10004,
NoResponseExpected = 10005,
// SB loader errors.
RomLdrSectionOverrun = 10100,
RomLdrSignature = 10101,
RomLdrSectionLength = 10102,
RomLdrUnencryptedOnly = 10103,
RomLdrEOFReached = 10104,
RomLdrChecksum = 10105,
RomLdrCrc32Error = 10106,
RomLdrUnknownCommand = 10107,
RomLdrIdNotFound = 10108,
RomLdrDataUnderrun = 10109,
RomLdrJumpReturned = 10110,
RomLdrCallFailed = 10111,
RomLdrKeyNotFound = 10112,
RomLdrSecureOnly = 10113,
// Memory interface errors.
MemoryRangeInvalid = 10200,
MemoryReadFailed = 10201,
MemoryWriteFailed = 10202,
// Property store errors.
UnknownProperty = 10300,
ReadOnlyProperty = 10301,
InvalidPropertyValue = 10302,
// Property store errors.
AppCrcCheckPassed = 10400,
AppCrcCheckFailed = 10401,
AppCrcCheckInactive = 10402,
AppCrcCheckInvalid = 10403,
AppCrcCheckOutOfRange = 10404
}
@@ -0,0 +1,7 @@
export enum ResponseTags {
Generic = 0xA0,
ReadMemory = 0xA3,
Property = 0xA7,
FlashReadOnce = 0xAF,
FlashReadResource = 0xB0
}
+6
View File
@@ -0,0 +1,6 @@
export * from './kboot';
export * from './enums';
export * from './models';
export * from './peripheral';
export * from './usb-peripheral';
export * from './util';
+194
View File
@@ -0,0 +1,194 @@
import { debug } from 'debug';
import { pack } from 'byte-data';
import { Peripheral } from './peripheral';
import { Commands, MemoryIds, Properties, ResponseCodes, ResponseTags } from './enums';
import { BootloaderVersion, CommandOption, CommandResponse, DataOption } from './models';
const logger = debug('kboot');
export class KBoot {
constructor(private peripheral: Peripheral) {
}
open(): void {
this.peripheral.open();
}
close(): void {
this.peripheral.close();
}
// ================= Read properties ==================
async getProperty(property: Properties, memoryId = MemoryIds.Internal): Promise<CommandResponse> {
const command: CommandOption = {
command: Commands.GetProperty,
params: [
...pack(property, { bits: 32 }),
...pack(memoryId, { bits: 32 })
]
};
const response = await this.peripheral.sendCommand(command);
if (response.tag !== ResponseTags.Property) {
throw new Error('Response tag is not property response');
}
if (response.code === ResponseCodes.UnknownProperty) {
throw new Error('Unknown property!');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Unknown error. Error code:${response.code}`);
}
return response;
}
async getBootloaderVersion(): Promise<BootloaderVersion> {
const response = await this.getProperty(Properties.BootloaderVersion);
const version: BootloaderVersion = {
bugfix: response.raw[12],
minor: response.raw[13],
major: response.raw[14],
protocolName: String.fromCharCode(response.raw[15])
};
logger('bootloader version %o');
return version;
}
// TODO: Implement other get/set property wrappers
// ================= End read properties ==================
async flashSecurityDisable(key: number[]): Promise<void> {
if (key.length !== 8) {
throw new Error('Flash security key must be 8 byte');
}
const command: CommandOption = {
command: Commands.FlashSecurityDisable,
params: [...key]
};
const response = await this.peripheral.sendCommand(command);
if (response.tag !== ResponseTags.Generic) {
throw new Error('Response tag is not generic response');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Can not disable flash security`);
}
}
async flashEraseRegion(startAddress: number, count: number): Promise<void> {
const command: CommandOption = {
command: Commands.FlashEraseRegion,
params: [
...pack(startAddress, { bits: 32 }),
...pack(count, { bits: 32 })
]
};
const response = await this.peripheral.sendCommand(command);
if (response.tag !== ResponseTags.Generic) {
throw new Error('Response tag is not generic response');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Can not disable flash security`);
}
}
async flashEraseAllUnsecure(): Promise<void> {
const command: CommandOption = {
command: Commands.FlashEraseAllUnsecure,
params: []
};
const response = await this.peripheral.sendCommand(command);
if (response.tag !== ResponseTags.Generic) {
throw new Error('Response tag is not generic response');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Can not disable flash security`);
}
}
async readMemory(startAddress: number, count: number): Promise<any> {
return this.peripheral.readMemory(startAddress, count);
}
async writeMemory(options: DataOption): Promise<void> {
return this.peripheral.writeMemory(options);
}
/**
* Reset the bootloader
*/
async reset(): Promise<void> {
const command: CommandOption = {
command: Commands.Reset,
params: []
};
let response: CommandResponse;
try {
response = await this.peripheral.sendCommand(command);
} catch (error) {
if (error.message === 'could not read from HID device') {
logger('Ignoring missing response from reset command.');
this.close();
return;
}
throw error;
}
if (response.tag !== ResponseTags.Generic) {
throw new Error('Response tag is not generic response');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Unknown error. Error code:${response.code}`);
}
}
/**
* Call it before send data to I2C
* @param address - The address of the I2C
* @param [speed=64] - Speed of the I2C
*/
async configureI2c(address: number, speed = 64): Promise<void> {
if (address > 127) {
throw new Error('Only 7-bit i2c address is supported');
}
const command: CommandOption = {
command: Commands.ConfigureI2c,
params: [
...pack(address, { bits: 32 }),
...pack(speed, { bits: 32 })
]
};
const response = await this.peripheral.sendCommand(command);
if (response.tag !== ResponseTags.Generic) {
throw new Error('Response tag is not generic response');
}
if (response.code !== ResponseCodes.Success) {
throw new Error(`Unknown error. Error code:${response.code}`);
}
}
}
@@ -0,0 +1,6 @@
export interface BootloaderVersion {
major: number;
minor: number;
bugfix: number;
protocolName: string;
}
@@ -0,0 +1,7 @@
import { Commands } from '../enums';
export interface CommandOption {
command: Commands;
hasDataPhase?: boolean;
params?: number[];
}
@@ -0,0 +1,7 @@
import { ResponseCodes, ResponseTags } from '../enums';
export interface CommandResponse {
tag: ResponseTags;
code: ResponseCodes;
raw: Buffer;
}
+4
View File
@@ -0,0 +1,4 @@
export interface DataOption {
startAddress: number;
data: Buffer;
}
+5
View File
@@ -0,0 +1,5 @@
export * from './bootloader-version';
export * from './command-option';
export * from './command-response';
export * from './data-option';
export * from './usb';
+7
View File
@@ -0,0 +1,7 @@
export interface USB {
vendorId: number;
productId: number;
interface?: number;
usage?: number;
usePage?: number;
}
+13
View File
@@ -0,0 +1,13 @@
import { CommandOption, CommandResponse, DataOption } from './models';
export interface Peripheral {
open(): void;
close(): void;
sendCommand(options: CommandOption): Promise<CommandResponse>;
writeMemory(data: DataOption): Promise<void>;
readMemory(startAddress: number, count: number): Promise<Buffer>;
}
+7
View File
@@ -0,0 +1,7 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"baseUrl": "./",
"outDir": "../dist"
}
}
+275
View File
@@ -0,0 +1,275 @@
import { debug } from 'debug';
import { devices, HID } from 'node-hid';
import { pack } from 'byte-data';
import { Peripheral } from './peripheral';
import { CommandOption, CommandResponse, DataOption, USB } from './models';
import { convertLittleEndianNumber, convertToHexString, deviceFinder, encodeCommandOption } from './util';
import { decodeCommandResponse } from './util/usb/decode-command-response';
import { validateCommandParams } from './util/usb/encode-command-option';
import { Commands, ResponseTags } from './enums';
import { snooze } from './util/snooze';
const logger = debug('kboot:usb');
const WRITE_DATA_STREAM_PACKAGE_LENGTH = 32;
export class UsbPeripheral implements Peripheral {
private _device: HID;
private _responseBuffer: Buffer;
private _dataBuffer: Buffer;
private _hidError: any;
constructor(private options: USB) {
logger('constructor options: %o', options);
}
open(): void {
this._hidError = undefined;
if (this._device) {
return;
}
logger('Available devices');
const device = devices()
.map(x => {
logger('%o', x);
return x;
})
.find(deviceFinder(this.options));
if (!device) {
logger('USB device can not be found %o', this.options);
throw new Error('USB device can not be found');
}
this._responseBuffer = Buffer.alloc(0);
this._dataBuffer = Buffer.alloc(0);
this._device = new HID(device.path);
this._device.on('data', this._usbDataListener.bind(this));
this._device.on('error', this._usbErrorListener.bind(this));
}
close(): void {
if (this._device) {
this._device.close();
this._device = undefined;
}
}
async sendCommand(options: CommandOption): Promise<CommandResponse> {
validateCommandParams(options.params);
const data = encodeCommandOption(options);
this._send(data);
return this._getNextCommandResponse();
}
writeMemory(option: DataOption): Promise<void> {
return new Promise<void>(async (resolve, reject) => {
try {
const command: CommandOption = {
command: Commands.WriteMemory,
hasDataPhase: true,
params: [
...pack(option.startAddress, { bits: 32 }),
...pack(option.data.length, { bits: 32 })
]
};
const firsCommandResponse = await this.sendCommand(command);
if (firsCommandResponse.tag !== ResponseTags.Generic) {
logger('Invalid write memory response! %o', firsCommandResponse);
return reject(new Error('Invalid write memory response!'));
}
if (firsCommandResponse.code !== 0) {
logger('Non zero write memory response! %o', firsCommandResponse);
return reject(new Error(`Non zero write memory response! Response code: ${firsCommandResponse.code}`));
}
for (let i = 0; i < option.data.length; i = i + WRITE_DATA_STREAM_PACKAGE_LENGTH) {
if (this._hidError) {
logger('Throw USB error %O', this._hidError);
return reject(new Error('USB error while write data'));
}
const slice = option.data.slice(i, i + WRITE_DATA_STREAM_PACKAGE_LENGTH);
const writeData = [
2, // USB channel
0,
slice.length,
0, // TODO: What is it?
...slice
];
logger('send data %o', convertToHexString(writeData));
this._device.write(writeData);
}
const secondCommandResponse = await this._getNextCommandResponse();
if (secondCommandResponse.tag !== ResponseTags.Generic) {
logger('Invalid write memory final response %o', secondCommandResponse);
return reject(new Error('Invalid write memory final response!'));
}
if (secondCommandResponse.code !== 0) {
logger('Non zero write memory final response %o', secondCommandResponse);
const msg = `Non zero write memory final response! Response code: ${secondCommandResponse.code}`;
return reject(new Error(msg));
}
resolve();
} catch (err) {
logger('Can not write memory data %O', err);
reject(err);
}
});
}
readMemory(startAddress: number, count: number): Promise<Buffer> {
return new Promise<Buffer>(async (resolve, reject) => {
try {
const command: CommandOption = {
command: Commands.ReadMemory,
params: [
...pack(startAddress, { bits: 32 }),
...pack(count, { bits: 32 })
]
};
this._resetDataBuffer();
this._resetResponseBuffer();
const firsCommandResponse = await this.sendCommand(command);
if (firsCommandResponse.tag !== ResponseTags.ReadMemory) {
logger('Invalid read memory response %o', firsCommandResponse);
return reject(new Error('Invalid read memory response!'));
}
if (firsCommandResponse.code !== 0) {
logger('Non zero read memory response %o', firsCommandResponse);
return reject(new Error(`Non zero read memory response! Response code: ${firsCommandResponse.code}`));
}
const byte4Number = firsCommandResponse.raw.slice(12, 15);
const arrivingData = convertLittleEndianNumber(byte4Number);
const memoryDataBuffer = await this._readFromDataStream(arrivingData);
const secondCommandResponse = await this._getNextCommandResponse();
if (secondCommandResponse.tag !== ResponseTags.Generic) {
logger('Invalid read memory final response %o', secondCommandResponse);
return reject(new Error('Invalid read memory final response!'));
}
if (secondCommandResponse.code !== 0) {
logger('Non zero read memory final response %o', secondCommandResponse);
const msg = `Non zero read memory final response! Response code: ${secondCommandResponse.code}`;
return reject(new Error(msg));
}
resolve(memoryDataBuffer);
} catch (error) {
logger('Read memory error %O', error);
reject(error);
}
});
}
private _send(data: number[]): void {
this.open();
logger('send data %o', `<${convertToHexString(data)}>`);
this._device.write(data);
}
private _usbDataListener(data: Buffer): void {
logger('received data %o', `[${convertToHexString(data)}]`);
const channel = data[0];
switch (channel) {
case 3:
this._responseBuffer = Buffer.concat([this._responseBuffer, data]);
break;
case 4:
this._dataBuffer = Buffer.concat([this._dataBuffer, data]);
break;
default:
logger('Unknown USB channel %o', channel);
break;
}
}
private _usbErrorListener(error: any): void {
logger('USB stream error %O', error);
this._hidError = error;
}
private _readFromCommandStream(byte = 36, timeout = 15000): Promise<Buffer> {
return this._readFromBuffer('_responseBuffer', byte, timeout);
}
private _readFromDataStream(byte = 36, timeout = 15000): Promise<Buffer> {
return this._readFromBuffer('_dataBuffer', byte, timeout);
}
private _readFromBuffer(bufferName: string, byte: number, timeout: number): Promise<Buffer> {
return new Promise<Buffer>(async (resolve, reject) => {
const startTime = new Date();
while (startTime.getTime() + timeout > new Date().getTime()) {
if (this._hidError) {
const err = this._hidError;
return reject(err);
}
const buffer: Buffer = this[bufferName];
if (buffer.length >= byte) {
const data = buffer.slice(0, byte);
if (buffer.length === byte) {
this[bufferName] = Buffer.alloc(0);
} else {
const newDataBuffer = Buffer.alloc(buffer.length - byte);
buffer.copy(newDataBuffer, 0, byte);
this[bufferName] = newDataBuffer;
}
logger(`read from ${bufferName}: %O`, convertToHexString(data));
return resolve(data);
}
await snooze(100);
}
logger('Timeout while try to read from buffer');
reject(new Error('Timeout while try to read from buffer'));
});
}
private _resetDataBuffer(): void {
this._dataBuffer = Buffer.alloc(0);
}
private _resetResponseBuffer(): void {
this._responseBuffer = Buffer.alloc(0);
}
private async _getNextCommandResponse(): Promise<CommandResponse> {
const response = await this._readFromCommandStream();
const commandResponse = decodeCommandResponse(response);
logger('next command response: %o', commandResponse);
return commandResponse;
}
}
@@ -0,0 +1,6 @@
export const encodeStringToParams = (data: string): Int8Array => {
// const buffer = Buffer.from(data);
// return new Int8Array(buffer, 0);
return new Int8Array(0);
};
+22
View File
@@ -0,0 +1,22 @@
export * from './encode-string-to-parameters';
export * from './response-parser';
export * from './usb';
export const convertToHexString = (arr: number[] | Buffer): string => {
let str = '';
for (const n of arr) {
let hex = n.toString(16);
if (hex.length < 2) {
hex = '0' + hex;
}
if (str.length > 0) {
str += ' ';
}
str += hex;
}
return str;
};
@@ -0,0 +1,21 @@
import { ResponseCodes, ResponseTags } from '../enums';
export const convertLittleEndianNumber = (data: Buffer): number => {
let value = 0;
for (let i = 0; i < data.length; i++) {
value += data[i] << (8 * i);
}
return value;
};
export const getResponseCode = (response: Buffer): ResponseCodes => {
const data = response.slice(8, 11);
return convertLittleEndianNumber(data);
};
export const getResponseTag = (response: Buffer): ResponseTags => {
return response[4];
};
+1
View File
@@ -0,0 +1 @@
export const snooze = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));
@@ -0,0 +1,18 @@
import { CommandResponse } from '../../models';
import { getResponseCode, getResponseTag } from '../response-parser';
export const decodeCommandResponse = (response: Buffer): CommandResponse => {
if (response.length < 8) {
throw new Error('Invalid response length!');
}
if (response[0] !== 3) {
throw new Error(`Invalid response command channel!`);
}
return {
code: getResponseCode(response),
tag: getResponseTag(response),
raw: response
};
};
@@ -0,0 +1,22 @@
import { isNullOrUndefined } from 'util';
import { Device } from 'node-hid';
import { USB } from '../../models';
export const deviceFinder = (usb: USB) => {
return (device: Device): boolean => {
if (device.productId !== usb.productId) {
return false;
}
if (device.vendorId !== usb.vendorId) {
return false;
}
// TODO: Add interface, usage and usePage filtering
// if (!isNullOrUndefined(usb.interface) && device.interface !== -1 && device.interface === usb.interface) {
// return true;
// }
return true;
};
};
@@ -0,0 +1,46 @@
import { isNullOrUndefined } from 'util';
import { pack } from 'byte-data';
import { CommandOption } from '../../models';
/**
* Encode the USB Command.
* @param option
*/
export const encodeCommandOption = (option: CommandOption): number[] => {
const payload = [
option.command,
option.hasDataPhase ? 1 : 0,
0, // Reserved. Should be 0
option.params ? option.params.length / 4 >> 0 : 0 // number of parameters
];
if (option.params) {
payload.push(...option.params);
}
const header = [
1, // Communication channel
0, // TODO: What is it?
...pack(payload.length, { bits: 16 }) // payload length in 2 byte
];
const placeholders = new Array(32 - payload.length)
.fill(0);
return [...header, ...payload, ...placeholders];
};
export const validateCommandParams = (params: any[]): void => {
if (isNullOrUndefined(params)) {
return;
}
if (!Array.isArray(params)) {
throw new Error('Command parameters must be an array!');
}
if (params.length > 28) {
throw new Error('Maximum 7 (28 bytes) command parameters allowed!');
}
};
+2
View File
@@ -0,0 +1,2 @@
export { deviceFinder } from './device-finder';
export { encodeCommandOption } from './encode-command-option';
+36
View File
@@ -0,0 +1,36 @@
import { BootloaderVersion, CommandResponse, Commands, KBoot, Peripheral, Properties, ResponseCodes, ResponseTags } from '../src';
import { TestPeripheral } from './test-peripheral';
describe('kboot', () => {
let kboot: KBoot;
let testPeripheral: Peripheral;
beforeEach(() => {
testPeripheral = new TestPeripheral();
kboot = new KBoot(testPeripheral);
});
describe('getBootloaderVersion', () => {
it('should works', async () => {
const sendCommandResponse: CommandResponse = {
code: ResponseCodes.Success,
tag: ResponseTags.Property,
// tslint:disable-next-line:max-line-length
raw: Buffer.from([0x03, 0x00, 0x0c, 0x00, 0xa7, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
};
spyOn(testPeripheral, 'sendCommand').and.returnValue(Promise.resolve(sendCommandResponse));
const version = await kboot.getBootloaderVersion();
const expectedVersion: BootloaderVersion = {
protocolName: 'K',
major: 2,
minor: 0,
bugfix: 0
};
expect(version).toEqual(expectedVersion);
expect(testPeripheral.sendCommand).toHaveBeenCalledWith({
command: Commands.GetProperty,
params: [1, 0, 0, 0, 0, 0, 0, 0]
});
});
});
});
+27
View File
@@ -0,0 +1,27 @@
import { CommandOption, CommandResponse, DataOption, Peripheral, ResponseCodes, ResponseTags } from '../src';
export class TestPeripheral implements Peripheral {
close(): void {
}
open(): void {
}
sendCommand(options: CommandOption): Promise<CommandResponse> {
const response = {
tag: ResponseTags.Generic,
code: ResponseCodes.Success,
raw: Buffer.alloc(0)
};
return Promise.resolve(response);
}
writeMemory(data: DataOption): Promise<void> {
return Promise.resolve();
}
readMemory(startAddress: number, count: number): Promise<Buffer> {
return Promise.resolve(Buffer.alloc(0));
}
}
+33
View File
@@ -0,0 +1,33 @@
import { execSync } from 'child_process';
import { join } from 'path';
import { readFileSync } from 'fs';
import * as MemoryMap from 'nrf-intel-hex';
export enum UhkReenumerationModes {
Bootloader = 'bootloader',
Buspal = 'buspal',
NormalKeyboard = 'normalKeyboard',
CompatibleKeyboard = 'compatibleKeyboard'
}
const USB_SCRIPTS_DIR = join(__dirname, '../../../usb');
export const reenumerate = (mode: UhkReenumerationModes): void => {
const reenumerateScriptFile = join(USB_SCRIPTS_DIR, 'reenumerate.js');
const command = [reenumerateScriptFile, mode.toString()].join(' ');
execSync(
command,
{
cwd: USB_SCRIPTS_DIR,
stdio: [0, 1, 2]
}
);
};
export const readBootloaderFirmwareFromHexFile = (): Map<any, any> => {
const hexFilePath = join(__dirname, '../../../../tmp/packages/firmware/devices/uhk60-right/firmware.hex');
const fileContent = readFileSync(hexFilePath, { encoding: 'utf8' });
const memoryMap = MemoryMap.fromHex(fileContent);
return memoryMap;
};
@@ -0,0 +1,10 @@
import { encodeStringToParams } from '../../src/util';
describe('encodeStringToParams', () => {
xit('should convert 8 character to little endian 4 byte array', () => {
const result = encodeStringToParams('0403020108070605');
const expectedResult = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08];
expect(result).toEqual(expectedResult);
});
});
@@ -0,0 +1,17 @@
import { getResponseCode, ResponseCodes } from '../../src';
describe('response-parser', () => {
describe('getResponseCode', () => {
it('should return with success', () => {
const buffer = Buffer.from([0x03, 0x00, 0x08, 0x00, 0xa7, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00]);
const responseCode = getResponseCode(buffer);
expect(responseCode).toEqual(ResponseCodes.Success);
});
it('should return with UnknownProperty', () => {
const buffer = Buffer.from([0x03, 0x00, 0x08, 0x00, 0xa7, 0x00, 0x00, 0x01, 0x3c, 0x28, 0x00, 0x00]);
const responseCode = getResponseCode(buffer);
expect(responseCode).toEqual(ResponseCodes.UnknownProperty);
});
});
});
@@ -0,0 +1,13 @@
import { decodeCommandResponse } from '../../../src/util/usb/decode-command-response';
describe('decodeCommandResponse', () => {
it('should parse the command', () => {
const arr = '03 00 0c 00 a0 00 00 02 00 00 00 00 c1 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00'
.split(' ');
const buffer = Buffer.from(arr);
const response = decodeCommandResponse(buffer);
expect(response.code).toEqual(0);
expect(response.tag).toEqual(0);
});
});
@@ -0,0 +1,16 @@
import { CommandOption, Commands } from '../../../src';
import { encodeCommandOption } from '../../../src/util';
describe('usb encodeCommandOption', () => {
it('should convert correctly', () => {
const option: CommandOption = {
command: Commands.GetProperty,
params: [1, 0, 0, 0, 0, 0, 0, 0]
};
const result = encodeCommandOption(option);
// tslint:disable-next-line:max-line-length
const expected = [1, 0, 0x0c, 0, 0x07, 0x00, 0x00, 0x02, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
expect(result).toEqual(expected);
});
});
@@ -0,0 +1,81 @@
import { reenumerate, UhkReenumerationModes, readBootloaderFirmwareFromHexFile } from './uhk-helpers';
import { BootloaderVersion, UsbPeripheral } from '../src';
import { KBoot } from '../src/kboot';
import { DataOption } from '../index';
xdescribe('UHK Integration tests', () => {
describe('bootloader', () => {
let usb: UsbPeripheral;
let kboot: KBoot;
beforeEach(() => {
reenumerate(UhkReenumerationModes.Bootloader);
usb = new UsbPeripheral({ vendorId: 0x1d50, productId: 0x6120 });
kboot = new KBoot(usb);
});
afterEach(() => {
if (usb) {
usb.close();
}
if (kboot) {
kboot.close();
}
});
it('get bootloader version', async () => {
const expectedVersion: BootloaderVersion = {
protocolName: 'K',
major: 2,
minor: 0,
bugfix: 0
};
const version = await kboot.getBootloaderVersion();
expect(version).toEqual(expectedVersion);
});
it('disable flash security', () => {
const backdoorKey = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08];
return kboot
.flashSecurityDisable(backdoorKey)
.catch(err => {
expect(err).toBeFalsy();
});
});
it('flash erase region', () => {
return kboot
.flashEraseRegion(0xc000, 475136)
.catch(err => {
expect(err).toBeFalsy();
});
});
it('read memory', () => {
const dataLength = 128;
return kboot
.readMemory(0xc000, dataLength)
.then((data: number[]) => {
expect(data).toBeTruthy();
expect(data.length).toEqual(dataLength);
})
.catch(err => {
expect(err).toBeFalsy();
});
});
it('write memory', async () => {
const bootloaderMemoryMap = readBootloaderFirmwareFromHexFile();
for (const [startAddress, data] of bootloaderMemoryMap.entries()) {
const dataOption: DataOption = {
startAddress,
data
};
await kboot.writeMemory(dataOption);
}
});
});
});
+6
View File
@@ -0,0 +1,6 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"baseUrl": "./"
}
}
+3
View File
@@ -0,0 +1,3 @@
user-config.bin
user-config-serialized.json
user-config-serialized.bin
+8
View File
@@ -0,0 +1,8 @@
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.ts"
],
"stopSpecOnExpectationFailure": true,
"random": false
}
+6
View File
@@ -0,0 +1,6 @@
{
"requires": true,
"lockfileVersion": 1,
"dependencies": {
}
}
+25
View File
@@ -0,0 +1,25 @@
{
"name": "test-serializer",
"main": "test-serializer.js",
"version": "0.0.0",
"description": "Agent is the configuration application of the Ultimate Hacking Keyboard.",
"author": "Ultimate Gadget Laboratories",
"repository": {
"type": "git",
"url": "git@github.com:UltimateHackingKeyboard/agent.git"
},
"license": "GPL-3.0",
"engines": {
"node": ">=8.1.0 <9.0.0",
"npm": ">=5.1.0 <6.0.0"
},
"dependencies": {
"uhk-common": "1.0.0"
},
"devDependencies": {
},
"scripts": {
"test": "jasmine-ts --config=jasmine.json",
"lint": "tslint --project tsconfig.json"
}
}
@@ -0,0 +1,40 @@
import { UhkBuffer, UserConfiguration } from '../../uhk-common/index';
const fs = require('fs');
const userConfig = JSON.parse(fs.readFileSync('../uhk-web/src/app/services/user-config.json'));
describe('Test Serializer', () => {
it('full config match', () => {
const config1Js = userConfig;
const config1Ts: UserConfiguration = new UserConfiguration().fromJsonObject(config1Js);
const config1Buffer = new UhkBuffer();
config1Ts.toBinary(config1Buffer);
const config1BufferContent = config1Buffer.getBufferContent();
fs.writeFileSync('user-config.bin', config1BufferContent);
config1Buffer.offset = 0;
console.log();
const config2Ts = new UserConfiguration().fromBinary(config1Buffer);
console.log('\n');
const config2Js = config2Ts.toJsonObject();
const config2Buffer = new UhkBuffer();
config2Ts.toBinary(config2Buffer);
fs.writeFileSync('user-config-serialized.json', JSON.stringify(config2Js, undefined, 4));
const config2BufferContent = config1Buffer.getBufferContent();
fs.writeFileSync('user-config-serialized.bin', config2BufferContent);
expect(config1Js).toEqual(config2Js);
const buffersContentsAreEqual: boolean = Buffer.compare(config1BufferContent, config2BufferContent) === 0;
expect(buffersContentsAreEqual).toBe(true);
});
it('check json serializer', () => {
const config1Ts: UserConfiguration = new UserConfiguration().fromJsonObject(userConfig);
const jsonObject = config1Ts.toJsonObject();
expect(jsonObject).toEqual(userConfig);
});
});
+9
View File
@@ -0,0 +1,9 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"moduleResolution": "node",
"experimentalDecorators": true
}
}
File diff suppressed because it is too large Load Diff
+39
View File
@@ -0,0 +1,39 @@
{
"name": "uhk-agent",
"main": "electron-main.js",
"version": "0.0.0",
"description": "Agent is the configuration application of the Ultimate Hacking Keyboard.",
"author": "Ultimate Gadget Laboratories",
"repository": {
"type": "git",
"url": "git@github.com:UltimateHackingKeyboard/agent.git"
},
"license": "GPL-3.0",
"engines": {
"node": ">=8.1.0 <9.0.0",
"npm": ">=5.1.0 <6.0.0"
},
"dependencies": {
"command-line-args": "4.0.7",
"decompress": "4.2.0",
"decompress-bzip2": "4.0.0",
"node-hid": "0.7.9",
"sudo-prompt": "7.0.0",
"tmp": "0.0.33",
"tslib": "1.10.0",
"uhk-common": "^1.0.0",
"uhk-usb": "^1.0.0"
},
"devDependencies": {
},
"scripts": {
"start": "cross-env DEBUG=kboot* electron ./dist/electron-main.js",
"electron:spe": "electron ./dist/electron-main.js --spe",
"build": "webpack && npm run install:build-deps && npm run build:usb && npm run download-firmware && npm run copy-to-tmp-folder",
"build:usb": "electron-rebuild -w node-hid -p -m ./dist",
"lint": "tslint --project tsconfig.json",
"install:build-deps": "cd ./dist && npm i",
"download-firmware": "node ../../scripts/download-firmware.js",
"copy-to-tmp-folder": "node ../../scripts/copy-to-tmp-folder.js"
}
}
@@ -0,0 +1 @@
declare module 'command-line-args';
+1
View File
@@ -0,0 +1 @@
declare module 'decompress';
@@ -0,0 +1 @@
declare module 'electron-is-dev';
+22
View File
@@ -0,0 +1,22 @@
/// <reference path="./custom_types/electron-is-dev.d.ts"/>
/*
* Install DevTool extensions when Electron is in development mode
*/
import { app } from 'electron';
import * as isDev from 'electron-is-dev';
if (isDev) {
app.once('ready', () => {
const { default: installExtension, REDUX_DEVTOOLS } = require('electron-devtools-installer');
installExtension(REDUX_DEVTOOLS)
.then((name: string) => console.log(`Added Extension: ${name}`))
.catch((err: any) => console.log('An error occurred: ', err));
require('electron-debug')({ showDevTools: true });
});
}
+187
View File
@@ -0,0 +1,187 @@
/// <reference path="./custom_types/electron-is-dev.d.ts"/>
/// <reference path="./custom_types/command-line-args.d.ts"/>
import './polyfills';
import { app, BrowserWindow } from 'electron';
import { autoUpdater } from 'electron-updater';
import * as path from 'path';
import * as url from 'url';
import * as commandLineArgs from 'command-line-args';
import { UhkHidDevice, UhkOperations } from 'uhk-usb';
// import { ElectronDataStorageRepositoryService } from './services/electron-datastorage-repository.service';
import { CommandLineArgs, LogRegExps } from 'uhk-common';
import { DeviceService } from './services/device.service';
import { logger } from './services/logger.service';
import { AppUpdateService } from './services/app-update.service';
import { AppService } from './services/app.service';
import { SudoService } from './services/sudo.service';
import * as isDev from 'electron-is-dev';
import { setMenu } from './electron-menu';
import { loadWindowState, saveWindowState } from './util/window';
const optionDefinitions = [
{name: 'addons', type: Boolean},
{name: 'spe', type: Boolean} // simulate privilege escalation error
];
const options: CommandLineArgs = commandLineArgs(optionDefinitions);
// import './dev-extension';
// require('electron-debug')({ showDevTools: true, enabled: true });
// Keep a global reference of the window object, if you don't, the window will
// be closed automatically when the JavaScript object is garbage collected.
let win: Electron.BrowserWindow;
autoUpdater.logger = logger;
let deviceService: DeviceService;
let uhkHidDeviceService: UhkHidDevice;
let uhkOperations: UhkOperations;
let appUpdateService: AppUpdateService;
let appService: AppService;
let sudoService: SudoService;
// https://github.com/megahertz/electron-log/issues/44
// console.debug starting with Chromium 58 this method is a no-op on Chromium browsers.
if (console.debug) {
console.debug = (...args: any[]): void => {
if (LogRegExps.writeRegExp.test(args[0])) {
console.log(args[0]);
} else if (LogRegExps.readRegExp.test(args[0])) {
console.log(args[0]);
} else if (LogRegExps.errorRegExp.test(args[0])) {
console.log(args[0]);
} else if (LogRegExps.transferRegExp.test(args[0])) {
console.log(args[0]);
} else {
console.log(...args);
}
};
}
const isSecondInstance = !app.requestSingleInstanceLock();
function createWindow() {
if (isSecondInstance) {
return;
}
logger.info('[Electron Main] Create new window.');
let packagesDir;
if (isDev) {
packagesDir = path.join(path.join(process.cwd(), process.argv[1]), '../../../../tmp');
} else {
packagesDir = path.dirname(app.getAppPath());
}
logger.info(`[Electron Main] packagesDir: ${packagesDir}`);
const loadedWindowState = loadWindowState();
// Create the browser window.
win = new BrowserWindow({
title: 'UHK Agent',
x: loadedWindowState.x,
y: loadedWindowState.y,
width: loadedWindowState.width,
height: loadedWindowState.height,
webPreferences: {
nodeIntegration: true
},
icon: path.join(__dirname, 'renderer/assets/images/agent-app-icon.png')
});
if (loadedWindowState.isFullScreen) {
win.setFullScreen(true);
} else if (loadedWindowState.isMaximized) {
win.maximize();
}
setMenu(win);
uhkHidDeviceService = new UhkHidDevice(logger, options, packagesDir);
uhkOperations = new UhkOperations(logger, uhkHidDeviceService, packagesDir);
deviceService = new DeviceService(logger, win, uhkHidDeviceService, uhkOperations, packagesDir);
appUpdateService = new AppUpdateService(logger, win, app);
appService = new AppService(logger, win, deviceService, options, uhkHidDeviceService);
sudoService = new SudoService(logger, options);
// and load the index.html of the app.
win.loadURL(url.format({
pathname: path.join(__dirname, 'renderer/index.html'),
protocol: 'file:',
slashes: true
}));
win.on('page-title-updated', (event: any) => {
event.preventDefault();
});
// Emitted when the window is closed.
win.on('closed', async () => {
// Dereference the window object, usually you would store windows
// in an array if your app supports multi windows, this is the time
// when you should delete the corresponding element.
logger.info('[Electron Main] win closed');
win = null;
await deviceService.close();
deviceService = null;
appUpdateService = null;
appService = null;
uhkHidDeviceService.close();
uhkHidDeviceService = null;
sudoService = null;
});
win.webContents.on('did-finish-load', () => {
});
win.webContents.on('crashed', (event: any) => {
logger.error(event);
});
win.on('close', () => saveWindowState(win));
win.on('resize', () => saveWindowState(win));
win.on('move', () => saveWindowState(win));
}
if (isSecondInstance) {
app.quit();
} else {
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', createWindow);
// Quit when all windows are closed.
app.on('window-all-closed', () => {
if (appUpdateService) {
appUpdateService.saveFirtsRun();
}
app.exit();
});
app.on('will-quit', () => {
});
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (win === null) {
createWindow();
}
});
app.on('second-instance', () => {
// Someone tried to run a second instance, we should focus our window.
if (win) {
if (win.isMinimized()) {
win.restore();
}
win.focus();
}
});
}
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here
+37
View File
@@ -0,0 +1,37 @@
import { app, BrowserWindow, Menu, MenuItemConstructorOptions, systemPreferences } from 'electron';
import * as isDev from 'electron-is-dev';
export const setMenu = (win: BrowserWindow): void => {
if (process.platform !== 'darwin' || isDev) {
win.setMenuBarVisibility(false);
return;
}
const template: MenuItemConstructorOptions[] = [
{
label: app.getName(),
submenu: [
{role: 'quit'}
]
},
{
label: 'Edit',
submenu: [
{role: 'cut'},
{role: 'copy'},
{role: 'paste'},
{role: 'delete'},
{role: 'selectall'}
]
}
];
// hide "Start Dictation" submenu item in Edit menu
systemPreferences.setUserDefault('NSDisabledDictationMenuItem', 'boolean', true as any);
// hide "Emoji & Symbols" submenu item in Edit menu
systemPreferences.setUserDefault('NSDisabledCharacterPaletteMenuItem', 'boolean', false as any);
const menu = Menu.buildFromTemplate(template);
Menu.setApplicationMenu(menu);
};
+6
View File
@@ -0,0 +1,6 @@
{
"name": "UHK-Agent",
"version": "1.0",
"devtools_page": "foo.html",
"default_locale": "en"
}
@@ -0,0 +1,10 @@
export interface CommandLineInputs {
/**
* addons menu visible or not
*/
addons?: boolean;
/**
* simulate privilege escalation error
*/
spe?: boolean;
}
@@ -0,0 +1,6 @@
export interface QueueEntry {
method: Function;
bind: any;
params?: any[];
asynchronous?: boolean;
}
@@ -0,0 +1,8 @@
import { SynchrounousResult } from 'tmp';
export interface TmpFirmware {
rightFirmwarePath: string;
leftFirmwarePath: string;
packageJsonPath: string;
tmpDirectory: SynchrounousResult;
}

Some files were not shown because too many files have changed in this diff Show More