feat: 开源蟹蟹输入RTOS适配改版并采用MIT商用许可
没有与搜索条件相匹配的文件
@@ -0,0 +1,5 @@
|
||||
**/.glyphix-work/
|
||||
**/__pycache__/
|
||||
**/src/assets/ime-dict/
|
||||
temp/
|
||||
work/
|
||||
@@ -0,0 +1,23 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 herry
|
||||
Copyright (c) 2026 kqakqakqa
|
||||
Copyright (c) 2026 crabKun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,17 @@
|
||||
# 蟹蟹输入 RTOS适配改版
|
||||
|
||||
本项目为基于[CrabKeyboard / 蟹蟹输入](https://github.com/crabPangXie/crabKeyboard)的独立RTOS适配改版,由herry进行Glyphix页面、离线词库索引、九宫/14键消歧、标准QWERTY、候选分页及生命周期适配。不是上游原版,也不表示上游作者、华为、OPPO或Glyphix对本改版作出背书。
|
||||
|
||||
上游固定提交:`93d36b5002dee80a3d253b1ec7ec9e29800a104c`。保留原作者kqakqakqa、crabKun的版权声明、MIT许可证及原始词库/读取器。RTOS自研适配部分以根目录[MIT许可证](./LICENSE)发布,**允许商用、修改、再分发和闭源集成**,须保留适用版权及许可全文。
|
||||
|
||||
第三方内容继续按各自许可证使用:
|
||||
|
||||
| 内容 | 作者/项目 | 许可与位置 |
|
||||
| --- | --- | --- |
|
||||
| CrabKeyboard V5词库和原始读取器 | kqakqakqa、crabKun | MIT,`third_party/crabKeyboard/LICENSE` |
|
||||
| 本地候选排序词频 | jieba 0.42.1 / Sun Junyi | MIT,`third_party/jieba/LICENSE` |
|
||||
| 操作图标 | Remix Icon v4.6.0,对应iconfont公开矢量 | Apache-2.0,`third_party/remix-icon/LICENSE`;矢量改色并转换PNG,来源/哈希见同目录`icons.json` |
|
||||
|
||||
14键参考公开演示中的相邻字母分组,自行实现离线消歧;不包含华为内部模型或固件代码。Glyphix/厂商SDK与运行时不包含在本项目MIT授权中,也不随源码分发,使用者需自行取得适用的厂商授权。
|
||||
|
||||
公开仓库:<https://git2.sydxky.cn/herry/crab-input-rtos>。匿名问题与建议:<https://git2.sydxky.cn/feedback/herry/crab-input-rtos>。
|
||||
@@ -0,0 +1,124 @@
|
||||
{
|
||||
"project": "蟹蟹输入 RTOS适配改版",
|
||||
"version": "1.1.0",
|
||||
"license": "MIT",
|
||||
"independent_history": true,
|
||||
"files": {
|
||||
".gitignore": "5fc1922c8c233ebab1a7a6d3f15f83a727039ad0b5be612bcb274706080c37fc",
|
||||
"LICENSE": "fbe0034e81020ac52847583ed5a8dab0e212266623b475381c0a468a800f67df",
|
||||
"NOTICE.md": "a16fb81a4ac41e6ebd8730c76194def41ba1abf61221d5c8f658907287c6ac03",
|
||||
"README.md": "027180cde6817890733b364dfe9f3bde016d7c1c39b13a87ea258d9e00f49db8",
|
||||
"build-rtos-game.ps1": "207ff9875af96221559f314364c932fe37bfc22c698ad1afabb9aeec40a8679e",
|
||||
"com.sydxky.rtos.imefixture/build.ps1": "36b41ff37b153c1030756e641d2bb8d8a5404425905897e1f99e728c96493dad",
|
||||
"com.sydxky.rtos.imefixture/glyphix.config.js": "c402178dc7457c56d9762b464a868b0c9ade304597d81ed46f0af04971fcddcf",
|
||||
"com.sydxky.rtos.imefixture/src/app.js": "fc00d19bc94e10c24f07bd9be1c2bb24d4978856963c5a68745338ecbf131dfc",
|
||||
"com.sydxky.rtos.imefixture/src/assets/icon.png": "f712ac5f8c500a33dd72cc1f15f9ad467e6043c284fb6ece1f1683e54d40e683",
|
||||
"com.sydxky.rtos.imefixture/src/main/index.ux": "d71f1cb5e0342cbb9e9559760631046887c942ecb75436a450acef7c493ec9de",
|
||||
"com.sydxky.rtos.imefixture/src/manifest.json": "40d7d1464409121b5c06ee77e3ff78d38c3f5271701cd754028cae5b5ef488c0",
|
||||
"com.sydxky.rtos.inputmethod/.gitignore": "0f139de1ca71ff6aa1e6f02974b5e38d219d7781d4184d524845dce12d947454",
|
||||
"com.sydxky.rtos.inputmethod/DESIGN.md": "5ba2d52755e9852be46f883507376fade0fbb006b44afc0cccf12447b8ae5a79",
|
||||
"com.sydxky.rtos.inputmethod/KEYBOARD_14.md": "27ae1fa73dd8fa8fce70743fa1e418b4a4ff71ba610e735f009344896adfa754",
|
||||
"com.sydxky.rtos.inputmethod/LICENSE": "fbe0034e81020ac52847583ed5a8dab0e212266623b475381c0a468a800f67df",
|
||||
"com.sydxky.rtos.inputmethod/NOTICE.md": "a16fb81a4ac41e6ebd8730c76194def41ba1abf61221d5c8f658907287c6ac03",
|
||||
"com.sydxky.rtos.inputmethod/PRIVACY.md": "c3062d8434db2fad3b6824cf2c41561a0bf6ae05e62f05d7c6316efd64d74af9",
|
||||
"com.sydxky.rtos.inputmethod/README.md": "5b652f6892960eb6d9fe00d1c64207fc9872c7d6f5e5ddaef8ec3590d4a390b6",
|
||||
"com.sydxky.rtos.inputmethod/VALIDATION_1.1.0.md": "891ea8683d0d1cc56d548ba9a7dc66fe18db5d68a94b5f6a7f11f1ad48c0c849",
|
||||
"com.sydxky.rtos.inputmethod/build.ps1": "32168e753699f48274fe2492e53b7285e4b62c15dc928f3aeb366a11150ebf5a",
|
||||
"com.sydxky.rtos.inputmethod/glyphix.config.js": "43beae1f2a61eed010149ae6ad77223ba084117ea5aee3cb3fcd48bfc0a4a32b",
|
||||
"com.sydxky.rtos.inputmethod/scripts/build-icons.py": "51f859a9517e7dd2e5e4bf9f688ce41dc79d4bc491fc66066dfe2db4aae4d704",
|
||||
"com.sydxky.rtos.inputmethod/scripts/convert-dictionary.py": "83eea8c7adae0254eb69170dec905c285c09c43ffcf10e8e553beb108acf43b3",
|
||||
"com.sydxky.rtos.inputmethod/scripts/install.mjs": "46c7d95b25c312734c0ca8387f4a782becd4723f21d01492d074da22ca05432d",
|
||||
"com.sydxky.rtos.inputmethod/src/app.js": "e51c7e0a67563bd64b6bc04aedde22842295824432942bc8f1ab0d4731cc3ed3",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/crab-keyboard-license.txt": "b140337f94481310f35abfd2210fde308ba30411899095fd961a77b94e022775",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/icon.png": "f712ac5f8c500a33dd72cc1f15f9ad467e6043c284fb6ece1f1683e54d40e683",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/LICENSE.txt": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/arrow-down-s-line.png": "69bb846769721ed4ad056ed0136da59d4aa6873edccd1e38a7ebd783cb94ed1e",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/arrow-left-s-line.png": "68d8920081fb883f4c59af47549d6b41a9b0a3748383b814e4480bfab0e711ed",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/arrow-right-s-line.png": "c6bffa0a51254c60c92e276e4d21ae8a1595d82c77d9d6a1064afbf534ea3562",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/check-line.png": "dc3c240ba0db808212dae8a29dadbda9b0428d699a42f9e52e789e74ed56967c",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/close-line.png": "d3cfb57fa03b03c512286187681caaf4026a4dc60c18b91cbdc0bcc9e2586621",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/delete-back-2-line.png": "a83002ddc7ba1f1a86b361c0c672ec63205393cae2df275a9ff2d49501fd6b9d",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/edit-2-line.png": "6161624226e2b62b24da7244d86564d6d0856533c2149d3b347e17013c562497",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/ime-icons/keyboard-box-line.png": "bf4b45e2e54b4fd7e901068df1de865334f7e4616583dc5358d35d14890948af",
|
||||
"com.sydxky.rtos.inputmethod/src/assets/jieba-license.txt": "18ba0984839f85853b29fadaf992f7dba8fd0ca0fbeae34de2b8735222dc7a37",
|
||||
"com.sydxky.rtos.inputmethod/src/common/ime-engine.js": "fbfc3fa9a09914ce69da1ec0d03bed92505389c9b8bdf254d236f379bb0ecd16",
|
||||
"com.sydxky.rtos.inputmethod/src/common/ime-lifecycle.js": "93525dffabcca0620acc36defd077ab6677b1032ef67faf695f3fbf3116b8a64",
|
||||
"com.sydxky.rtos.inputmethod/src/keyboard/index.ux": "8022e5cff0075975377e0c3390ee9d9a541379768dc4732a77ff0ef865306dd3",
|
||||
"com.sydxky.rtos.inputmethod/src/main/index.ux": "f763f0dc80b9fd46e00830d6ec0de8683063f98c1edee94ee522c2605b695fca",
|
||||
"com.sydxky.rtos.inputmethod/src/manifest.json": "1adcd2d7610ce92c1c01f9c06f597e64569ae31de2422f1022e49bc04bb804ff",
|
||||
"com.sydxky.rtos.inputmethod/tests/client.test.mjs": "8633a789b0c5e19ea63881ccf084e4442b0ab0fbd97a9fba4317e34e5570ff81",
|
||||
"com.sydxky.rtos.inputmethod/tests/engine.test.mjs": "4967791409f7aa418b5d2b60a61aca48bbedfe5f8fad4a51b556a4f8e7c3e5a4",
|
||||
"com.sydxky.rtos.inputmethod/tests/layout.py": "b632411cd593d369180abaeedbf036002e986e3e5e2c2f15b4e5ff157588aa78",
|
||||
"com.sydxky.rtos.inputmethod/tests/native.py": "4b92ee16edb92ca919f6bce52974fa114dca7b6b23c83b3300f6e370a3247379",
|
||||
"com.sydxky.rtos.inputmethod/tests/visual.py": "2874b3446028f7b7e54c4b1ecf594f8801c7249d67a0d17b8e7b0fdf97c8ff0f",
|
||||
"com.sydxky.rtos.inputmethod/third_party/UPSTREAM.md": "e8311679981a318fef7142f7a2ecb2b1a7860f5fee32282729cab6af2a41d640",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/LICENSE": "b140337f94481310f35abfd2210fde308ba30411899095fd961a77b94e022775",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/README.md": "88c2f96be16dc5d80677745072940c8a1cbc7aab40e554de50ec11bc22339b75",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/lookupDictV5.original.js": "915605439ebc404d808ccce6cb18abfff3981f1cdf53a78e9a743c78c4a6ddc9",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key0.dat": "795a5316089b67a7bffabf87080bd61f3720f9e0fd2f2866a092901f99b794e8",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key1.dat": "a4bcae2b6eb30084d3cf2ac64e5d9ca71eb94e8ac1f7c8fc8b38a5d478982be2",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key10.dat": "5731d9f3a3cad0304ecc650d74c723185c9d43f74d66d7b5622454d1fc31f99c",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key11.dat": "fa2a4bfa64cb236a051ceaf6b9b227159dde7aaba21ae997baafac6df4332345",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key12.dat": "7685ad03e3b5eeac404e8d6f0fc9e8524262b2c4a42ef0301d9e85c64d3db63b",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key13.dat": "b06f6fc0e2769a8f6e9491a0b97148f8c8d211ba8fe8ed122e1dbffca0eb7399",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key14.dat": "5d21973e2c1d833e93bfe51c42064b26743f6012e35c73ffcd2b5046cca3eeff",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key15.dat": "62c3324ccc143cd4e9ee533b0117ee06fc893d58c5d2ed0353da4dde33f5eab1",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key16.dat": "8c2c0fc7568cf6b674e8630449eb989c7ebdf34f34d0b2041a59748bd20c9638",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key17.dat": "f62c9c886ca4ee387a780a8c1e24116d73dedfda228de3614978c22f994ef7ec",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key18.dat": "fa7fda7b3b452908623383a6285aa15b265a41d48de58524fe0f0879b8aad259",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key19.dat": "00674fb37b56b5973cf0a7ee38b8258652949e4c02782ff6651d2aa63b9c62fc",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key2.dat": "45e860c89d1362de6007e46a6aa84a0d2fcd9682924de6e5f111cd536e18bfd1",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key20.dat": "1715a74e0bd00bf89406806682d865a53782d4cd9c4aee5050e547e8a84ffad6",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key3.dat": "00b464b6ee7ecd7e4406150eecf6c512e22611c6505a5045834cd5c3b7d9068d",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key4.dat": "a5c5719d09f931efc44b629fe92fd3faea0cc8c5a6ec28d0a9c9b9cdb0eb5ad9",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key5.dat": "3d5e43374441150af704b9dae9a6d62ac66406306b37709f12119fe44153e353",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key6.dat": "586c47ee8542f8bf59d7b4bf71fb1715a1bf3e7452d91068edcaf8b566e81e52",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key7.dat": "4525656f4d9fcd85bff07b876af75eb84f4f711a55a63c258c491d22dfeedff5",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key8.dat": "8e88d27fbc09fc3b133cbafd3b8e2f1b2269950cfcae12c23c1e152013f63f47",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/key9.dat": "c741aefb551b686a9ade67d3a16a5230d74134af6c3d0faf08557e19698d5825",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value1.dat": "81c1798a0dda463cacae6ac5285ed9ad0cd0730dde167c18ee3500f1e1d8d8f2",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value10.dat": "9c4fded85bb7467304df917d510d987a824785058a9f8bb9c9095571b49fbf0d",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value11.dat": "3be277f87112c7bbc7242882b4ca92ff6e9d38d7be1b51b7899545a5c13d1a19",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value12.dat": "789c47185b5aaa93293239b356a6a4928d3d29daaf9a4d18f3c94f392f861613",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value13.dat": "b7366771afebe2ddc466eb9dc8dd840b1e7a8a8214354e2930d4fa4346f27dc6",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value14.dat": "9c638ef5d554738087505b158482e5b0caba59a36df65b9d0f3e5eee78f91588",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value15.dat": "846ea5776c9e11f44762cc032d690435464a312e82813530b01cb6001bd0a2f6",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value16.dat": "b86c42aaf4a818b4eaccd2663b6fb01f3ef3b1dc8482f20636cbde1a95ca52da",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value17.dat": "2f809c59a318d7d8d8605985092517902b6c627a40936af856785ed596c1133e",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value18.dat": "d64613d9bc90f503b964984939de0dc881c3a0feda2684bade0c572555c2099d",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value19.dat": "ecfb7ba56450c671fc941d56556a42d508569e341c5dd2581b18a3d7d27ab55c",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value2.dat": "d66703e7ac7ab6c2cd3b3c8109e656e1f78ace3e2bb49123ce3a2b3da4ca04d0",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value20.dat": "896757081c224c72586dfa5babb4300c93639a27ba9a70eb34b9dfd5c23735f2",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value3.dat": "19c47c2f8b8483946db81572368b3f3b2aa61c5a03953351e327f3f83cb31275",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value4.dat": "1be64f23183fca36920ae3f002d541febaa1b26b5ca3018ee53ffdd05546d56d",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value5.dat": "7b8a109e705537784a0a8075cc4fe3d1de8288a6b6b0240627685c81ed9695a9",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value6.dat": "5b4028a017b228357446f799cd29b28dd5a24d63340f8b48ce858c75c64029f1",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value7.dat": "b9f6e109ba5f1b5bca758613cb5cccfecf358915ce6415525c333b19515d6428",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value8.dat": "3d1622d4717680b31a6e037c88e7f046fecfe2339e521272e1d1eae0a7094606",
|
||||
"com.sydxky.rtos.inputmethod/third_party/crabKeyboard/pinyinDictV5_20260416/value9.dat": "1c0caab370f1f14048ab6dd2da0011bedcddfed0ed0378b5c98171b6b22caf35",
|
||||
"com.sydxky.rtos.inputmethod/third_party/jieba/LICENSE": "18ba0984839f85853b29fadaf992f7dba8fd0ca0fbeae34de2b8735222dc7a37",
|
||||
"com.sydxky.rtos.inputmethod/third_party/jieba/dict.txt": "7197c3211ddd98962b036cdf40324d1ea2bfaa12bd028e68faa70111a88e12a8",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/README.md": "6a7bee86ad1942d01be10b556dd3036e43a59d708fc94fd2f5f3e3fcfcf84b0b",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-down-s-line.iconfont.svg": "1efa1c713b710c0e9ef5eb47bec762a4b5ce21ffb454d44a3bbb118a8bec3e83",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-down-s-line.upstream.svg": "4b0bf8a45d554ba97d8115ef2713010f196ad49d57eeecb8a42d4839a5ba8f9e",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-left-s-line.iconfont.svg": "ccf02486d37383bbdc3319d9b348c5daef43693526d41aff6ad409d04e0664ef",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-left-s-line.upstream.svg": "7d0407d47b59e7d69446ef81b79e95c5d5a4085e7fa7ba30770556b67197407e",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-right-s-line.iconfont.svg": "b6678427ec45e7b00257b6c2d8eeb533e6b92c6d09864ce7844178e38fade8af",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/arrow-right-s-line.upstream.svg": "2c579a4dbaf25e19a128d71e04f4cf43b19ad2487a0076ff7e7e5a94c9b3e013",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/check-line.iconfont.svg": "1b194f3b6ac39e6199fb003ac3140cc2ed2d1213201c0bdbf69abffaba67f6ce",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/check-line.upstream.svg": "b83a64bf881169d5edeaa6134a7ba37192f0ddc80c2e2a890578ae0f2f8f9169",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/close-line.iconfont.svg": "748ea3e8a4fe22671ff3347e998d51679eaf3ff3950f6348f286f6dd36f19a92",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/close-line.upstream.svg": "db3b4dcebb2d962a0231a191538bf6939620798b18f0ba52d4b91c5a4649ce54",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/delete-back-2-line.iconfont.svg": "a6279d35f9fd1578f813bcfa2077fac98ec8e3a4d7bc8f90a5b3f3f2744c3a59",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/delete-back-2-line.upstream.svg": "d6fc7f41c0b84fe48a06685dc081780b6cd103ac9b3db96dc44e624aa0a113e8",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/edit-2-line.iconfont.svg": "74d6590a22053c253c0d00d9ac5e35fb1f8c02e2243d0e3643a959eef233476f",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/edit-2-line.upstream.svg": "d03a3a7b874377a18488b7b24b596b8078afbd9bced93ad791b6fb2f4866613d",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/icons.json": "e80556881b6db1a87e5308679d55e3d2b6bed130a4421407451eae9b0e41ff5a",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/keyboard-box-line.iconfont.svg": "813d79347c357a919317edf84252a505dbdc441c1144076b4e8389a8ce217de0",
|
||||
"com.sydxky.rtos.inputmethod/third_party/remix-icon/keyboard-box-line.upstream.svg": "e39f28cbf418269405f517126a64cbf4b3332b3295cc8a3af670f77344a669c4",
|
||||
"docs/UI_PREVIEW.png": "7853297cccbc52122e17605db677a1be723cacdd82dae36efb8fc7ec300ad1ab",
|
||||
"tests/emulator-validate.py": "dfc550b5873f1d03254e8bc6f819139992a1648b9a10b168575cda8e35224f50"
|
||||
},
|
||||
"sensitive_findings": []
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
# 蟹蟹输入 · RTOS适配改版
|
||||
|
||||
基于[CrabKeyboard / 蟹蟹输入](https://github.com/crabPangXie/crabKeyboard)的独立Glyphix RTOS改版,由herry适配。不是上游原版,不表示上游或设备厂商背书。
|
||||
|
||||
**MIT开源,允许商用、修改、再分发和闭源集成。** 请保留版权及许可全文;[LICENSE](./LICENSE) / [署名与第三方许可](./NOTICE.md)。Remix Icon图标另按Apache-2.0使用,厂商SDK/运行时不包含在本项目MIT授权中。
|
||||
|
||||

|
||||
|
||||
## 功能
|
||||
|
||||
- 浅色满屏键盘,适配圆屏466×466及方屏390×450。
|
||||
- 26键全拼/英文均为标准QWERTY,10/9/7三排;九宫拼音与14键双字母模式。
|
||||
- 14键采用`QW ER TY UI OP / AS DF GH JK L / ZX CV BN M`,参考公开布局,自研离线消歧,保留完整候选及连续输入。
|
||||
- 104,837组拼音/缩写索引、163,238候选项,四项分页,不作100项截断。
|
||||
- 英文大小写、数字、符号、Unicode光标与删除、可选本地学习、私密输入和本机草稿。
|
||||
- 原生`.ux`页面,可通过`router.push`接入其他Glyphix应用;系统级全局输入法注册需厂商支持。
|
||||
|
||||
## 下载与反馈
|
||||
|
||||
- [1.1.0发行版与两屏QuickApp完整包](https://git2.sydxky.cn/herry/crab-input-rtos/releases)
|
||||
- [已有问题与建议](https://git2.sydxky.cn/herry/crab-input-rtos/issues)
|
||||
- [免注册匿名提交问题与建议](https://git2.sydxky.cn/feedback/herry/crab-input-rtos)
|
||||
|
||||
Git2免登录浏览、克隆和下载,当前关闭注册,代码与版本由所有者维护。
|
||||
|
||||
```powershell
|
||||
git clone https://git2.sydxky.cn/herry/crab-input-rtos.git
|
||||
cd crab-input-rtos
|
||||
```
|
||||
|
||||
## 构建
|
||||
|
||||
准备Windows PowerShell 7、Node.js和Python 3。厂商Glyphix SDK不随仓库分发;自行取得适用授权后,将含`bin/gx.exe`与`share/`的完整SDK放在`temp/glyphix-v0.7.2-windows-x64/`。本版验证使用`gx v0.10.1 / 3ed38835`,需要`generic-watch-466x466-quickapp`和`generic-watch-390x450-quickapp`配置。
|
||||
|
||||
```powershell
|
||||
& .\com.sydxky.rtos.inputmethod\build.ps1
|
||||
```
|
||||
|
||||
脚本无损生成词库分片,执行40项引擎及29项UX脚本断言,然后构建普通/QuickApp四配置。QuickApp输出位于应用的`.glyphix-work/dist/`,每屏必须保留完整`bundle.pkg`、`icon.png`、`manifest.json`,不是APK/HAP。
|
||||
|
||||
## 原生模拟器复现
|
||||
|
||||
`com.sydxky.rtos.imefixture/`是本仓库附带的最小离线验收页,只用于实际前后台切换,不包含其他内部应用。先构建并启动一次圆屏参考页,获得厂商launcher/global资源,然后退出该模拟器:
|
||||
|
||||
```powershell
|
||||
& .\com.sydxky.rtos.imefixture\build.ps1
|
||||
Push-Location .\com.sydxky.rtos.imefixture
|
||||
& ..\temp\glyphix-v0.7.2-windows-x64\bin\gx.exe emulate -d generic-watch-466x466
|
||||
Pop-Location
|
||||
python .\com.sydxky.rtos.inputmethod\tests\native.py --work work/native --output work/evidence
|
||||
python .\com.sydxky.rtos.inputmethod\tests\visual.py --work work/visual --output work/evidence/visual
|
||||
```
|
||||
|
||||
视觉脚本需要Pillow。运行时保持8192 KiB内存,不接管其他占用Inspector 14201的进程。1.1.0原产品四配置84项原生操作、84项操作后布局、44个视觉状态均通过,见[验收记录](./com.sydxky.rtos.inputmethod/VALIDATION_1.1.0.md)。公开仓库用最小参考页替换内部参考应用,发布前另行验证公开树构建及原生测试。
|
||||
|
||||
真机安装、目标固件性能/续航和商店审核尚未验收。详细接入、词库与14键说明见[应用文档](./com.sydxky.rtos.inputmethod/README.md)和[14键算法](./com.sydxky.rtos.inputmethod/KEYBOARD_14.md)。
|
||||
@@ -0,0 +1,81 @@
|
||||
param(
|
||||
[Parameter(Mandatory = $true)][string]$ProjectRoot,
|
||||
[switch]$QuickAppOnly,
|
||||
[switch]$Clean
|
||||
)
|
||||
|
||||
Set-StrictMode -Version Latest
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$ProjectRoot = (Resolve-Path -LiteralPath $ProjectRoot).Path
|
||||
$toolBin = Join-Path $PSScriptRoot 'temp\glyphix-v0.7.2-windows-x64\bin'
|
||||
$gx = Join-Path $toolBin 'gx.exe'
|
||||
if (-not (Test-Path -LiteralPath $gx)) { throw "Glyphix toolchain not found: $gx" }
|
||||
$manifestPath = Join-Path $ProjectRoot 'src\manifest.json'
|
||||
$manifest = Get-Content -LiteralPath $manifestPath -Raw | ConvertFrom-Json
|
||||
if ($manifest.package -cnotmatch '^[a-z][a-z0-9_]*(\.[a-z][a-z0-9_]*)+$') {
|
||||
throw 'Invalid Glyphix package name'
|
||||
}
|
||||
$quickAppTargets = @('generic-watch-466x466-quickapp', 'generic-watch-390x450-quickapp')
|
||||
|
||||
$targets = if ($QuickAppOnly) {
|
||||
$quickAppTargets
|
||||
} else {
|
||||
@('generic-watch-466x466', 'generic-watch-390x450', 'generic-watch-466x466-quickapp', 'generic-watch-390x450-quickapp')
|
||||
}
|
||||
|
||||
$originalPath = $env:Path
|
||||
Push-Location $ProjectRoot
|
||||
try {
|
||||
$env:Path = "$toolBin;$originalPath"
|
||||
$availableDevices = @(& $gx list device)
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Unable to read Glyphix device profiles' }
|
||||
foreach ($device in $targets) {
|
||||
if ($availableDevices -cnotcontains $device) { throw "Missing Glyphix device profile: $device" }
|
||||
}
|
||||
if ($Clean) {
|
||||
& $gx clean
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Glyphix clean failed' }
|
||||
}
|
||||
foreach ($device in $targets) {
|
||||
$arguments = @('build', '-d', $device)
|
||||
if (-not $device.Contains('quickapp')) { $arguments += '-e' }
|
||||
$output = @(& $gx @arguments 2>&1 | ForEach-Object { $_.ToString() })
|
||||
$output | ForEach-Object { Write-Host $_ }
|
||||
if ($LASTEXITCODE -ne 0 -or ($output -join "`n") -match '(?im)^\s*(?:error|fatal):\s') {
|
||||
throw "Glyphix build failed for $device"
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($device in $quickAppTargets) {
|
||||
$deliveryRoot = Join-Path $ProjectRoot ".glyphix-work\dist\$device\$($manifest.package)"
|
||||
foreach ($fileName in @('bundle.pkg', 'manifest.json', 'icon.png')) {
|
||||
$artifact = Join-Path $deliveryRoot $fileName
|
||||
if (-not (Test-Path -LiteralPath $artifact -PathType Leaf) -or (Get-Item -LiteralPath $artifact).Length -eq 0) {
|
||||
throw "Missing or empty QuickApp artifact: $artifact"
|
||||
}
|
||||
}
|
||||
$packedManifest = Get-Content -LiteralPath (Join-Path $deliveryRoot 'manifest.json') -Raw | ConvertFrom-Json
|
||||
if ($packedManifest.package -cne $manifest.package -or
|
||||
$packedManifest.versionName -cne $manifest.versionName -or
|
||||
$packedManifest.versionCode -ne $manifest.versionCode) {
|
||||
throw "QuickApp package/version mismatch: $device"
|
||||
}
|
||||
$icon = [IO.File]::ReadAllBytes((Join-Path $deliveryRoot 'icon.png'))
|
||||
if ($icon.Length -lt 8 -or [Convert]::ToHexString($icon[0..7]) -cne '89504E470D0A1A0A') {
|
||||
throw "Invalid QuickApp PNG icon: $device"
|
||||
}
|
||||
foreach ($fileName in @('bundle.pkg', 'manifest.json', 'icon.png')) {
|
||||
$artifact = Join-Path $deliveryRoot $fileName
|
||||
[pscustomobject]@{
|
||||
Package = $manifest.package
|
||||
Device = $device
|
||||
File = $fileName
|
||||
Bytes = (Get-Item -LiteralPath $artifact).Length
|
||||
SHA256 = (Get-FileHash -LiteralPath $artifact -Algorithm SHA256).Hash
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
Pop-Location
|
||||
$env:Path = $originalPath
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
param([switch]$QuickAppOnly)
|
||||
& (Join-Path $PSScriptRoot '..\build-rtos-game.ps1') -ProjectRoot $PSScriptRoot -QuickAppOnly:$QuickAppOnly
|
||||
@@ -0,0 +1 @@
|
||||
module.exports = {minify:false}
|
||||
@@ -0,0 +1 @@
|
||||
export default {}
|
||||
|
之后 宽度: | 高度: | 大小: 720 B |
@@ -0,0 +1,6 @@
|
||||
<template><div class="page"><p>输入验收参考页</p><p>稍后返回输入应用</p></div></template>
|
||||
<style>.page{width:100%;height:100%;background-color:#F2F3F6;display:flex;flex-direction:column;justify-content:center;align-items:center}p{color:#20232B;font-size:20px}</style>
|
||||
<script>
|
||||
import launch from '@system.launch'
|
||||
export default {timer:null,onShow(){this.timer=setTimeout(()=>{this.timer=null;launch.launch('com.sydxky.rtos.inputmethod')},1500)},onHide(){if(this.timer!==null){clearTimeout(this.timer);this.timer=null}},onDestroy(){if(this.timer!==null){clearTimeout(this.timer);this.timer=null}}}
|
||||
</script>
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"package": "com.sydxky.rtos.imefixture",
|
||||
"name": "输入验收参考页",
|
||||
"icon": "/assets/icon.png",
|
||||
"versionName": "1.0.0",
|
||||
"versionCode": 10000,
|
||||
"features": [],
|
||||
"router": {
|
||||
"entry": "main",
|
||||
"pages": {
|
||||
"main": {
|
||||
"component": "index"
|
||||
}
|
||||
}
|
||||
},
|
||||
"config": {
|
||||
"designWidth": 410
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
.glyphix-work/
|
||||
src/assets/ime-dict/
|
||||
tests/__pycache__/
|
||||
!third_party/
|
||||
!third_party/**
|
||||
@@ -0,0 +1,22 @@
|
||||
# 浅色输入界面
|
||||
|
||||
用户选择:浅色简洁,接近手机输入法。自 1.0.1 起使用以下界面规范。
|
||||
|
||||
- 浅灰键盘底 `#ECEEF2`、白色主按键、深色主文字 `#20232B`。
|
||||
- 蓝色 `#2867D9` 用于完成、取消、拼音编码和候选翻页;候选文字保留深色,不使用多种彩色按键。
|
||||
- 候选栏使用连续浅色区域,三个候选与展开箭头同排。全候选页每页四个大选项,字形和拼音分别对齐,不截断剩余候选。
|
||||
- 九宫字母居中,数字作为较小的辅助标记。全拼和英文使用 QWERTY 10/9/7 三排;14键使用相邻字母配对的5/5/4三排。英语及数字模式隐藏无用的候选栏。
|
||||
- 模式切换采用无底色文字操作,完成保留蓝色主按钮,空格和删除分别使用白色及灰色。
|
||||
- 首页只突出一个“开始输入”按钮,草稿、数字、私密输入放在同一行;操作说明通过独立入口展开。
|
||||
- 圆屏与方屏保留各自的安全边距,不将矩形按键硬贴圆形边缘。界面只使用厂商支持的原生布局、颜色和圆角,不依赖阴影、CSS 渐变或 DOM。图标作为原生按钮内部的本地图片,不用图片替代交互布局。
|
||||
|
||||
1.1.0 增加以下约束:
|
||||
|
||||
- 最外层无 padding 的背景容器铺满视口,内层单独处理安全边距,避免黑色留边。
|
||||
- 九宫、26键和14键保留 49px 实际行高,键盘容器禁止收缩;26键采用22px字号、14键采用24px字号。QWERTY第二/三排收为94%/84%,其他模式末排收为91%,使用显式行布局。
|
||||
- 圆屏完整候选每项高37px、上下间距各2px,四项总高度不得超过列表容器;页码不允许收缩。不能仅凭按钮落在圆屏内就认定没有内部裁切。
|
||||
- 圆屏顶部、预览、候选、模式和底部操作按垂直预算分配空间;底部操作栏宽 200 设计像素,编辑行宽 300,按钮四角离圆边至少 3px。
|
||||
- 取消、退格、完成、编辑、返回键盘、翻页使用 iconfont 上经固定版本上游核对的 Remix Icon 线性图标。运行时使用 72px 透明 PNG,以 20/24px 显示;保留原始 SVG 与许可,不在运行时联网加载。
|
||||
- 使用实际 Inspector 树检查按钮和文字是否超出任一父容器;另检查屏幕边界、边缘黑色缺口、四候选与翻页/底栏的整体显示。几何与截图同时通过才可用于最终预览。
|
||||
|
||||
浏览器1.1.0同步使用浅色主界面和同一个键盘维护源。14键使用独立编码索引,候选仍来自同一完整词库;账号、私密输入和草稿持久化规则保持有效。
|
||||
@@ -0,0 +1,40 @@
|
||||
# 14键拼音
|
||||
|
||||
1.1.0新增离线14键模式。布局参考华为手表输入法的公开演示;当前没有公开可核对的华为内部词库、消歧模型或实现源码。本项目自行实现编码、词库索引、候选排序和前缀消费,不声称复现其内部算法。
|
||||
|
||||
## 公开参考与布局
|
||||
|
||||
- [公开演示一](https://www.bilibili.com/video/BV1YFCEB7EkW/):已核对约34~35秒出现的14键页面。
|
||||
- [公开演示二](https://www.bilibili.com/video/BV18t1nB9EwD/):作为交互参考。
|
||||
|
||||
```text
|
||||
QW ER TY UI OP
|
||||
AS DF GH JK L
|
||||
ZX CV BN M
|
||||
```
|
||||
|
||||
14个原生按钮覆盖全部26个字母,没有重排QWERTY字母顺序。每次点击表示该组中的一个字母,`L`、`M`为单字母键;`V`可用于拼音中的`ü`。模式栏“14键”直接进入,选中时显示蓝色。26键全拼和英文使用独立的标准10/9/7三排。
|
||||
|
||||
## 编码与候选
|
||||
|
||||
`ime-engine.js`中`KEY14_GROUPS`定义分组,`0123456789abcd`为内部token;每次点击只追加一个token,一段最多32位。原始词库每个拼音/缩写映射为相同分组编码,按输入前缀筛选所有真实候选。三位前缀分片减少单次解析和资源文件数量;一位/两位编码另建短索引。
|
||||
|
||||
例如`nihao`和`buhao`都映射为`c3754`,按键显示`BN UI GH AS OP`,因此“你好”和“不好”都应出现。候选先按本地已选偏好(默认关闭),再按匹配消费长度和jieba词频排序,不硬编码“你好”第一。保留原始候选,按四项分页访问全部结果。
|
||||
|
||||
连续输入`nihaoshijie`时,选择“你好”只消费对应的五次点击,剩余`shijie`编码继续查词。存在未确认编码时阻止模式切换与完成;内部token不能作为正文提交。退格先删除组合编码,再删除正文。
|
||||
|
||||
组合栏最多展示最近六个字母组,更长时加省略标记;原始编码与候选不因显示省略而丢失。只将前三个推荐候选及展开页的四个候选放入响应式状态。
|
||||
|
||||
## 词库、缓存和学习
|
||||
|
||||
原始41个CrabKeyboard V5文件不变,104,837组索引、163,238个候选项。生成器为14键建立2585个分片,加上4194个九宫/全拼分片,共6779个;最大116,686字节。生成后分别回读两套索引,与全部原始条目逐项比较,生成文件不提交Git。
|
||||
|
||||
解码缓存最多四项、JSON文本合计不超过90,000字符,超过上限的分片不驻留。模拟器沿用8192 KiB内存配置;没有通过增加内存通过验收。
|
||||
|
||||
14键学习使用`k14:<token串>`独立键空间,与全拼/九宫隔离;合计仍最多100组、每组三个真实已选候选。私密输入不学习、不持久化,隐藏时清除编辑状态。
|
||||
|
||||
## 验收范围
|
||||
|
||||
逻辑回归验证分组覆盖、编码、歧义、词库完整性、连续前缀消费和学习隔离。四配置原生回归实际点击14个按钮,检查“你好/不好”共存、未确认组合保护、连续输入和候选前后翻页;视觉回归覆盖14键与14键完整候选页。具体结果见[1.1.0验收](./VALIDATION_1.1.0.md)。
|
||||
|
||||
公开演示仅用于布局参考;未测得华为算法内部参数,也没有真机延迟、帧率或功耗结论。
|
||||
@@ -0,0 +1,23 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 herry
|
||||
Copyright (c) 2026 kqakqakqa
|
||||
Copyright (c) 2026 crabKun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,17 @@
|
||||
# 蟹蟹输入 RTOS适配改版
|
||||
|
||||
本项目为基于[CrabKeyboard / 蟹蟹输入](https://github.com/crabPangXie/crabKeyboard)的独立RTOS适配改版,由herry进行Glyphix页面、离线词库索引、九宫/14键消歧、标准QWERTY、候选分页及生命周期适配。不是上游原版,也不表示上游作者、华为、OPPO或Glyphix对本改版作出背书。
|
||||
|
||||
上游固定提交:`93d36b5002dee80a3d253b1ec7ec9e29800a104c`。保留原作者kqakqakqa、crabKun的版权声明、MIT许可证及原始词库/读取器。RTOS自研适配部分以根目录[MIT许可证](./LICENSE)发布,**允许商用、修改、再分发和闭源集成**,须保留适用版权及许可全文。
|
||||
|
||||
第三方内容继续按各自许可证使用:
|
||||
|
||||
| 内容 | 作者/项目 | 许可与位置 |
|
||||
| --- | --- | --- |
|
||||
| CrabKeyboard V5词库和原始读取器 | kqakqakqa、crabKun | MIT,`third_party/crabKeyboard/LICENSE` |
|
||||
| 本地候选排序词频 | jieba 0.42.1 / Sun Junyi | MIT,`third_party/jieba/LICENSE` |
|
||||
| 操作图标 | Remix Icon v4.6.0,对应iconfont公开矢量 | Apache-2.0,`third_party/remix-icon/LICENSE`;矢量改色并转换PNG,来源/哈希见同目录`icons.json` |
|
||||
|
||||
14键参考公开演示中的相邻字母分组,自行实现离线消歧;不包含华为内部模型或固件代码。Glyphix/厂商SDK与运行时不包含在本项目MIT授权中,也不随源码分发,使用者需自行取得适用的厂商授权。
|
||||
|
||||
公开仓库:<https://git2.sydxky.cn/herry/crab-input-rtos>。匿名问题与建议:<https://git2.sydxky.cn/feedback/herry/crab-input-rtos>。
|
||||
@@ -0,0 +1,11 @@
|
||||
# 蟹蟹输入数据说明
|
||||
|
||||
本独立应用全程离线,不请求网络、账号、位置、麦克风或通讯录,不上传输入内容。
|
||||
|
||||
正在编辑的文本仅在本次页面的内存中。主动“保存草稿”后,普通文本保存于本应用本地存储,供下次启动恢复;可清空全文后重新保存以删除旧草稿,卸载应用也会清除该存储。私密输入不提供保存、不参与学习,切换其他应用或销毁页面时清空编辑状态。
|
||||
|
||||
候选学习默认关闭。开启后仅在本应用保存最多 100 组编码、每组三个主动选择的真实候选;不会保存全文。在编辑页可关闭学习或“清除学习”。关闭学习不会自动删除旧记录,可通过清除按钮删除。
|
||||
|
||||
嵌入其他 Glyphix 应用后,键盘数据保存在该宿主自己的隔离空间。完成输入会将文本回填给宿主;宿主后续的网络行为适用其自身说明。腕上浏览的兼容模式会在明确告知后把网页输入交给服务器,详见其独立隐私政策。
|
||||
|
||||
键盘基于 MIT CrabKeyboard 与 jieba 离线词频,许可证随源码与运行包提供。应用未提供系统级输入法接管或跨应用剪贴板读取。
|
||||
@@ -0,0 +1,67 @@
|
||||
# 蟹蟹输入 / Glyphix RTOS
|
||||
|
||||
**蟹蟹输入 RTOS适配改版**:基于CrabKeyboard的独立改版,RTOS适配代码采用[MIT协议](./LICENSE),允许商用、修改及再分发,须保留版权与许可。上游与第三方署名见[NOTICE.md](./NOTICE.md)。公开源码:<https://git2.sydxky.cn/herry/crab-input-rtos>;免注册[匿名反馈](https://git2.sydxky.cn/feedback/herry/crab-input-rtos)。
|
||||
|
||||
独立应用 `com.sydxky.rtos.inputmethod`,版本 `1.1.0 / 10100`。基于 [CrabKeyboard](https://github.com/crabPangXie/crabKeyboard) 的 MIT 全量词库和拼音前缀消费方式,重写为 Glyphix `.ux` 页面;不依赖 HarmonyOS HML、Android 输入法服务、DOM 或网络。
|
||||
|
||||
1.0.1 按用户选择重做为浅色手机输入法风格:浅灰底、白色大按键、深色候选和蓝色主操作。候选栏与模式栏减少色块,英语和数字模式隐藏无用候选区;首页只突出一个输入主按钮。设计规范见 [DESIGN.md](./DESIGN.md)。
|
||||
|
||||
1.1.0 将全拼和英文改为标准 **QWERTY 10/9/7 三排**,新增公开华为风格的 **14键双字母拼音**,布局及独立离线消歧算法见 [14键说明](./KEYBOARD_14.md)。修复键盘容器被压缩导致末排裁切、四候选列表间距超出父容器、背景留黑的问题,圆屏下方逐行收窄。取消、退格、完成、编辑、键盘返回和翻页使用同一套 iconfont / Remix Icon 线性图标,保留“空格”和输入模式文字。SVG 原稿、来源和 Apache-2.0 许可见 [图标说明](./third_party/remix-icon/README.md);运行包采用本地透明 PNG,不增加网络请求。
|
||||
|
||||
上游固定提交 `93d36b5002dee80a3d253b1ec7ec9e29800a104c`(v2.0.0-patch01)。41 个原始词库文件均按 Git blob SHA-1 验证后保存于 `third_party/crabKeyboard/`,许可证和原始读取器一并保留。全量数据包含 **104,837 组拼音/缩写索引、163,238 个候选项**;这是索引项计数,不表示不同词语数。按原词库内容逐字/逐词组合输入长句。
|
||||
|
||||
## 使用
|
||||
|
||||
- 点击首页文字区或“开始输入”即打开满屏键盘。完成回填;取消保留原文。草稿需主动保存,仅保存在本应用。
|
||||
- 默认九宫大按键。“26键”切到标准 QWERTY 全拼,`v` 表示 `ü`;“九宫”切回九宫。“14键”直接进入双字母模式。连续点击对应字母组,选择候选后只消费匹配部分,剩余编码继续查词。存在未选词的九宫或14键编码时禁止切换模式/完成,避免丢字或把编码当文字提交。
|
||||
- 第一行显示三个候选。点击右侧下箭头按每页四项查看全部匹配候选,左右箭头翻页,不使用原项目扩展列表的 100 项截断。拼音候选保留每组原始顺序;九宫和14键歧义通过本地 jieba 0.42.1 词频排序,学习偏好可优先排序。
|
||||
- 支持英文大小写、数字、完整可打印 ASCII 标点与常用中文标点。符号分两组大按键,通过“下一组符号”切换。网址额外提供 `https://`、`.com`。
|
||||
- 点击文本预览或铅笔图标移动光标、换行、上屏全拼、清空全文。Unicode 字符按码点计数和删除,避免拆坏 emoji。清空全文需第二次点击确认;长按退格图标连续删除,松开/隐藏/销毁停止。勾号完成,叉号取消,键盘图标返回输入。
|
||||
- 学习默认关闭,可开启或清除,仅保存最多 100 组、每组三个已选择的真实候选,不记录整段正文。私密输入始终遮盖、不学习、不保存;切到其他应用时清空私密编辑状态。
|
||||
|
||||
## 自动弹出的实际范围
|
||||
|
||||
Glyphix 官方 [text-field 文档](https://docs.xfaith-tech.com/glyphix/docs/components/text-field.html)明确说明普通输入框不会弹出输入法。当前厂商工具没有提供系统级输入法注册/全局输入焦点注入接口。本项目交付独立文本应用和可接入页面,**不能接管未接入的第三方应用或固件界面**。
|
||||
|
||||
腕上浏览 `1.1.0` 同步使用此键盘:点击地址、配对码及兼容网页输入项后直接打开此页。输入法本身全离线;浏览器原有统一账号验证和兼容模式数据告知继续有效。其他应用可按下述方式接入。
|
||||
|
||||
```powershell
|
||||
# 先构建本项目生成资源,再复制页面/引擎/资源并注册路由。
|
||||
& '.\build.ps1'
|
||||
node .\scripts\install.mjs '<目标 Glyphix 工程根目录>'
|
||||
```
|
||||
|
||||
在业务输入区的 `on:click` 中调用;页面上保留单一 `opening` 标志防止重复弹出:
|
||||
|
||||
```javascript
|
||||
const result = await router.push({uri: 'keyboard', params: {
|
||||
initial: this.value, title: '输入内容', inputType: 'text',
|
||||
maxLength: 2048, allowNewline: true, secret: false
|
||||
}})
|
||||
if (result && result.accepted) this.value = result.text
|
||||
```
|
||||
|
||||
`inputType` 支持 `text`、`url`、`number`、`pin`、`password`。`pin` 仅接受数字;`number` 允许小数点和负号;`maxLength` 上限 4096 个 Unicode 码点。业务仍需校验数值、网址或配对码的实际格式。不要在异步生命周期中等待页面结果。在宿主 `app.js` 的 `onHide` 中调用 `clearPrivateInputs(router)`(`common/ime-lifecycle.js`),覆盖厂商页面生命周期差异。宿主销毁后不得继续处理异步结果。
|
||||
|
||||
## 构建和复现
|
||||
|
||||
使用非 MSIX PowerShell 7,从本目录执行 `build.ps1`。脚本先无损转换词库、运行真实引擎和 UX 脚本测试,再用 RTOS 父目录的 OPPO 附件 `gx.exe` 生成圆/方普通镜像及圆/方 QuickApp 完整目录。SDK 不随源码分发。新机器另需从厂商附件准备工具,先构建/启动 `com.sydxky.rtos.snakeov` 一次取得 launcher/global 资源;通用 Inspector 支持位于 `../tests/emulator-validate.py`。
|
||||
|
||||
```powershell
|
||||
python .\tests\native.py --work '<独立临时目录>' --output '<原生证据目录>'
|
||||
python .\tests\visual.py --work '<另一个临时目录>' --output '<原生证据目录>/visual'
|
||||
```
|
||||
|
||||
原生验收覆盖四配置,每配置 21 项,共 **84/84**;真实引擎及 UX 脚本分别通过 **40 + 29** 项断言。实际结果与运行包 SHA-256 见生成的 `results.json`。测试脚本使用既有离线参考应用执行真实前后台切换;不会接管被其他进程占用的 Inspector 14201。
|
||||
|
||||
1.1.0 的原生检查同时逐层核对可见 Button、图标、Label 与父容器边界;圆屏按钮四角限制在半径 230px 内。独立视觉回归覆盖四配置各11个页面状态,共 **44/44**,并统计靠近屏幕边缘的黑色缺口,避免只检查屏幕边界而漏掉内部裁切。截图保留实际原生画面,未绘制替代界面。详见 [本版验收记录](./VALIDATION_1.1.0.md)。
|
||||
|
||||
1.0.0 历史版本的 **72/72** 原生用例及 **26 + 22** 项逻辑断言见 [此前验收记录](./VALIDATION_2026-11-13.md)。1.0.1 浅色版重新完成四配置 **72/72** 原生验证,详见 [本版验收记录](./VALIDATION_1.0.1.md)。
|
||||
|
||||
## 内存与词库
|
||||
|
||||
`convert-dictionary.py` 将原始 V5 trie 无损转换为 **6779** 个编码分片(九宫/全拼4194个、14键2585个),最大分片 **116,686** 字节。九宫/全拼使用四位前缀,14键使用三位前缀;短编码单独索引。解码缓存限制为四项且 JSON 文本合计不超过 90,000 字符,大分片不缓存。仅当前页的四个候选进入展开列表,所有候选对象不放进响应式状态。转换器分别回读两种索引,验证与原始索引完全相同;不改写原始字典。
|
||||
|
||||
初期两位编码分片曾触发原生模拟器内存回收,已改为四位编码分片。验收保持既有 `--memory-profile 8192`,没有通过增大模拟器内存规避问题。模拟器耗时不能替代真机帧率、延迟或功耗结论。
|
||||
|
||||
MIT 许可副本也随运行包保留。jieba 词频只用于歧义候选排序,不联网、不分词上传。官方公开 API 不足以实现全局输入法安装;本轮仍按用户确认的模拟器与提交包范围交付,真机安装与平台审核单独处理。
|
||||
@@ -0,0 +1,56 @@
|
||||
# 蟹蟹输入1.1.0验收
|
||||
|
||||
版本`1.1.0 / 10100`,包名`com.sydxky.rtos.inputmethod`。本轮沿用厂商`gx v0.10.1 / 3ed38835`,普通/QuickApp圆屏466×466、方屏390×450四配置,内存配置保持8192 KiB。视觉记录时间:`2026-11-14T09:48:39.828292+08:00`。
|
||||
|
||||
## 本版修正
|
||||
|
||||
- 全拼和英文均为标准QWERTY:`qwertyuiop`、`asdfghjkl`、`zxcvbnm`,10/9/7三排。
|
||||
- 新增14键:`QW ER TY UI OP / AS DF GH JK L / ZX CV BN M`。参考公开布局,独立离线消歧;完整词库、连续前缀消费、候选分页和模式保护见[算法说明](./KEYBOARD_14.md)。
|
||||
- 键盘容器禁止纵向压缩,背景外层铺满屏幕,圆屏按行收窄;完整候选上下间距减少,页码禁止收缩,修复末排及四候选在父容器内被截断。
|
||||
- iconfont / Remix Icon统一操作图标,SVG原稿及Apache-2.0许可保留,运行用本地透明PNG。
|
||||
|
||||
## 验证结果
|
||||
|
||||
| 验证 | 结果 |
|
||||
| --- | --- |
|
||||
| 真实引擎逻辑 | 40项断言通过 |
|
||||
| 真实UX脚本 | 29项断言通过 |
|
||||
| 全量词库转换 | 两套索引分别回读与全部104,837组原始索引、163,238候选项一致 |
|
||||
| 四配置构建 | 4/4,每个QuickApp目录含bundle.pkg、icon.png、manifest.json |
|
||||
| 原生操作回归 | 84/84,四配置各21项 |
|
||||
| 原生操作后布局 | 84/84 |
|
||||
| 独立视觉/布局回归 | 44/44,四配置各11个状态 |
|
||||
|
||||
原生回归保留原有18项,新增14键词组歧义与模式保护、连续输入、完整候选分页三项。实际点击原生按钮,检查“你好/不好”共存、未确认组合禁止完成/切模式、只消费选词匹配编码和候选前后翻页。全拼与英文额外检查实际三排顺序。
|
||||
|
||||
视觉状态覆盖首页、九宫、QWERTY全拼、四候选、编辑、14键、14键完整候选、英文、数字及两组符号。检查可见Button/ImageBox/Label是否超出任一父容器,容忍1px原生舍入;圆屏按钮/图标四角限制半径230px,实测按钮最大半径227.86px,小于屏幕233px。全部44个状态的指定边缘采样带黑色缺口像素为0。此结论针对验收状态,不代替未来新增页面的检查。
|
||||
|
||||
Inspector空闲时可能将新树关联到旧back buffer。视觉脚本通过给提示文本暂加空格后恢复,触发真实原生重绘,再重复snapshot保留新帧。没有绘制替代界面。`UI_PREVIEW.png`排除模拟器外壳周边像素,所有按钮完整保留;未裁剪原图及控件树在证据ZIP中。
|
||||
|
||||
## 查询与内存
|
||||
|
||||
八个全拼样本依次为nihao、zhongguo、shijie、shurufa、beijing、tianqi、shanghai、gongzuo,原生记录如下,单位ms:
|
||||
|
||||
| 配置 | 八个全拼样本耗时 |
|
||||
| --- | --- |
|
||||
| round | 80, 45, 42, 41, 44, 45, 46, 43 |
|
||||
| rect | 78, 45, 44, 22, 44, 45, 45, 45 |
|
||||
| round-quickapp | 79, 45, 44, 22, 44, 46, 64, 44 |
|
||||
| rect-quickapp | 77, 44, 43, 23, 44, 45, 47, 43 |
|
||||
|
||||
上述为模拟器全拼查词样本;不是专门的14键基准,也不表示真机端到端延迟、帧率或功耗。14键原生用例等待词库稳定上限5秒并验证实际结果,未另行声明毫秒级指标。
|
||||
|
||||
共6779个分片(4194九宫/全拼、2585十四键),最大116,686字节;缓存最多四项、解码JSON文本合计90,000字符,大分片不驻留。未扩大模拟器内存。
|
||||
|
||||
## 运行包与交付
|
||||
|
||||
| 配置 | 实际运行 bundle.pkg SHA-256 |
|
||||
| --- | --- |
|
||||
| round | `D0D0BBCBACA78A3300F9CE7538BD39CC0810BCF9872B3B42F0E4ED040EDB0A51` |
|
||||
| rect | `767D7A034D943D4B2D75CBE1EA623BEAAEF8CCBF0033B7944A3763513E74B291` |
|
||||
| round-quickapp | `C82E78F47B4CDCBD33B6E39D2C08005CCFFD617608336A17CF5C4F808370E31F` |
|
||||
| rect-quickapp | `A1CA39663B85D36FF464BE5D62949C7ADEFD2EFA7939C8E65ABD90DF41F192E8` |
|
||||
|
||||
提交目录包含两屏QuickApp完整6文件,`crab-keyboard-1.1.0-quickapp.zip`为打包副本,源码和`keyboard-emulator-evidence.zip`另行提供。`results.json`与`visual-results.json`分别记录操作和视觉结果,交付脚本核对两份证据使用同一构建包;`archive-hashes.json`及`DELIVERY_INTEGRITY.json`记录归档哈希、CRC及敏感扫描。
|
||||
|
||||
自动弹出仅覆盖本应用与已接入宿主,厂商公开API没有已验证的系统级IME注册能力。输入法全离线,无账号或联网请求;浏览器联网维持统一账号验证。按用户确认仅做模拟器和提交包验收;RTOS真机安装、目标固件行为、性能、续航及平台审核未验收。
|
||||
@@ -0,0 +1,9 @@
|
||||
param([switch]$QuickAppOnly, [switch]$Clean)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
& python (Join-Path $PSScriptRoot 'scripts\convert-dictionary.py')
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Keyboard dictionary generation failed' }
|
||||
& node (Join-Path $PSScriptRoot 'tests\engine.test.mjs')
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Keyboard engine tests failed' }
|
||||
& node (Join-Path $PSScriptRoot 'tests\client.test.mjs')
|
||||
if ($LASTEXITCODE -ne 0) { throw 'Keyboard client tests failed' }
|
||||
& (Join-Path $PSScriptRoot '..\build-rtos-game.ps1') -ProjectRoot $PSScriptRoot -QuickAppOnly:$QuickAppOnly -Clean:$Clean
|
||||
@@ -0,0 +1 @@
|
||||
module.exports = {minify: false}
|
||||
@@ -0,0 +1,19 @@
|
||||
"""Rebuild local PNGs from the retained iconfont SVG originals (pip install resvg-py)."""
|
||||
import hashlib,json,pathlib,xml.etree.ElementTree as ET
|
||||
import resvg_py
|
||||
|
||||
APP=pathlib.Path(__file__).resolve().parents[1]
|
||||
SOURCE=APP/'third_party/remix-icon'
|
||||
OUT=APP/'src/assets/ime-icons'
|
||||
OUT.mkdir(parents=True,exist_ok=True)
|
||||
metadata=json.loads((SOURCE/'icons.json').read_text(encoding='utf-8'))
|
||||
for record in metadata['icons']:
|
||||
raw=(SOURCE/(record['name']+'.iconfont.svg')).read_bytes()
|
||||
assert hashlib.sha256(raw).hexdigest().upper()==record['iconfont_svg_sha256']
|
||||
root=ET.fromstring(raw);root.attrib.pop('style',None)
|
||||
color='#FFFFFF' if record['name']=='check-line' else '#515866' if record['name']=='delete-back-2-line' else '#2867D9'
|
||||
for node in root.iter():node.attrib.pop('fill',None)
|
||||
root.set('fill',color)
|
||||
(OUT/(record['name']+'.png')).write_bytes(resvg_py.svg_to_bytes(svg_string=ET.tostring(root,encoding='unicode'),width=72,height=72))
|
||||
(OUT/'LICENSE.txt').write_bytes((SOURCE/'LICENSE').read_bytes())
|
||||
print('Built',len(metadata['icons']),'local 72px transparent icons; display at 20/24px')
|
||||
@@ -0,0 +1,82 @@
|
||||
"""Losslessly convert CrabKeyboard's V5 trie into bounded, digit-indexed shards."""
|
||||
import argparse, hashlib, json, pathlib, re
|
||||
|
||||
APP = pathlib.Path(__file__).resolve().parents[1]
|
||||
GROUPS = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
|
||||
T9 = {letter: str(i + 2) for i, group in enumerate(GROUPS) for letter in group}
|
||||
GROUPS14 = ['qw','er','ty','ui','op','as','df','gh','jk','l','zx','cv','bn','m']
|
||||
KEY14 = {letter: '0123456789abcd'[i] for i, group in enumerate(GROUPS14) for letter in group}
|
||||
|
||||
def from94(value):
|
||||
number = 0
|
||||
for ch in value:
|
||||
assert 33 <= ord(ch) <= 126
|
||||
number = number * 94 + ord(ch) - 33
|
||||
return number
|
||||
|
||||
def convert(source, target):
|
||||
files = {p.name: p.read_bytes() for p in source.glob('*.dat')}
|
||||
frequency_path=APP/'third_party/jieba/dict.txt'
|
||||
frequencies={}
|
||||
if frequency_path.exists():
|
||||
for line in frequency_path.read_text(encoding='utf-8').splitlines():
|
||||
parts=line.split(' ')
|
||||
if len(parts)>=2 and parts[1].isdigit():frequencies[parts[0]]=int(parts[1])
|
||||
entries = {}
|
||||
def walk(key, depth, position, length):
|
||||
data = files['key%d.dat' % depth][position:position+length].decode('ascii')
|
||||
for item in data.split('\x1e'):
|
||||
if not item: continue
|
||||
char = item[0]
|
||||
off, size = map(from94, item[1:].split('\x1f'))
|
||||
if char == '_':
|
||||
words = files['value%d.dat' % depth][off:off+size].decode('utf-8').split(' ')
|
||||
entries[key] = [word for word in words if word]
|
||||
else:
|
||||
walk(key+char, depth+1, off, size)
|
||||
walk('', 0, 0, len(files['key0.dat']))
|
||||
shards = {}
|
||||
for key, words in sorted(entries.items()):
|
||||
digits = ''.join(T9[ch] for ch in key)
|
||||
bucket = digits[:4] if len(digits) >= 4 else 's'+digits
|
||||
shards.setdefault(bucket, {})[key] = words
|
||||
code14 = ''.join(KEY14[ch] for ch in key)
|
||||
bucket14 = 'd'+code14[:3] if len(code14)>=3 else 'ds'+code14
|
||||
shards.setdefault(bucket14,{})[key]=words
|
||||
target.mkdir(parents=True, exist_ok=True)
|
||||
assert target.resolve().is_relative_to((APP/'src/assets').resolve())
|
||||
# Only replace files listed in the previous generated manifest.
|
||||
if (target/'meta.json').exists():
|
||||
previous=json.loads((target/'meta.json').read_text(encoding='utf-8'))
|
||||
for name in previous['shards']:
|
||||
assert re.fullmatch(r'(?:short|s?[0-9]+|ds?[0-9a-d]+)',name)
|
||||
old=target/(name+'.json')
|
||||
if name not in shards and old.exists():old.unlink()
|
||||
for name, content in shards.items():
|
||||
weights={word:frequencies[word] for words in content.values() for word in words if word in frequencies}
|
||||
output=target/(name+'.json')
|
||||
data=json.dumps({'entries':content,'frequencies':weights}, ensure_ascii=False, separators=(',', ':')).encode('utf-8')
|
||||
if not output.exists() or output.read_bytes()!=data:output.write_bytes(data)
|
||||
# Every original candidate remains accessible, in original per-key order.
|
||||
restored = {};restored14={}
|
||||
for name in shards:
|
||||
(restored14 if name.startswith('d')else restored).update(json.loads((target/(name+'.json')).read_text(encoding='utf-8'))['entries'])
|
||||
assert restored == entries and restored14 == entries
|
||||
report = dict(upstream='https://github.com/crabPangXie/crabKeyboard',
|
||||
commit='93d36b5002dee80a3d253b1ec7ec9e29800a104c',
|
||||
variant='pinyinDictV5_20260416', keys=len(entries),
|
||||
candidates=sum(map(len, entries.values())), shards=sorted(shards),
|
||||
t9_shards=sum(not name.startswith('d')for name in shards),
|
||||
key14_shards=sum(name.startswith('d')for name in shards),key14_groups=GROUPS14,key14_prefix_length=3,
|
||||
largest_shard_bytes=max((target/(name+'.json')).stat().st_size for name in shards),
|
||||
source_files={name:hashlib.sha256(data).hexdigest() for name,data in sorted(files.items())})
|
||||
if frequency_path.exists():report['t9_frequency_source']={'project':'jieba 0.42.1','license':'MIT','sha256':hashlib.sha256(frequency_path.read_bytes()).hexdigest()}
|
||||
output=target/'meta.json';data=(json.dumps(report, ensure_ascii=False, indent=2)+'\n').encode('utf-8')
|
||||
if not output.exists() or output.read_bytes()!=data:output.write_bytes(data)
|
||||
print(json.dumps({**{k:v for k,v in report.items() if k not in ['source_files','shards']},'shards':len(shards)}, ensure_ascii=False))
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--source', type=pathlib.Path, default=APP/'third_party/crabKeyboard/pinyinDictV5_20260416')
|
||||
parser.add_argument('--target', type=pathlib.Path, default=APP/'src/assets/ime-dict')
|
||||
args = parser.parse_args(); convert(args.source, args.target)
|
||||
@@ -0,0 +1,26 @@
|
||||
// Copy the canonical keyboard into another Glyphix sandbox; no cross-app data.
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import {fileURLToPath} from 'node:url'
|
||||
const app=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'..')
|
||||
const target=path.resolve(process.argv[2]||'')
|
||||
if(!process.argv[2]||!fs.existsSync(path.join(target,'src/manifest.json')))throw Error('Usage: node scripts/install.mjs <Glyphix project>')
|
||||
const oldMeta=path.join(target,'src/assets/ime-dict/meta.json')
|
||||
if(fs.existsSync(oldMeta)){
|
||||
const current=JSON.parse(fs.readFileSync(path.join(app,'src/assets/ime-dict/meta.json'),'utf8')).shards
|
||||
for(const name of JSON.parse(fs.readFileSync(oldMeta,'utf8')).shards){
|
||||
if(!/^(short|s?[0-9]+|ds?[0-9a-d]+)$/.test(name))throw Error('Invalid generated shard name')
|
||||
const old=path.join(target,'src/assets/ime-dict',name+'.json')
|
||||
if(!current.includes(name)&&fs.existsSync(old))fs.unlinkSync(old)
|
||||
}
|
||||
}
|
||||
for(const relative of ['keyboard/index.ux','common/ime-engine.js','common/ime-lifecycle.js','assets/ime-dict','assets/ime-icons']){
|
||||
const destination=path.join(target,'src',relative);fs.mkdirSync(path.dirname(destination),{recursive:true});fs.cpSync(path.join(app,'src',relative),destination,{recursive:true})
|
||||
}
|
||||
const license=path.join(target,'src/assets/crab-keyboard-license.txt')
|
||||
fs.copyFileSync(path.join(app,'third_party/crabKeyboard/LICENSE'),license)
|
||||
fs.copyFileSync(path.join(app,'third_party/jieba/LICENSE'),path.join(target,'src/assets/jieba-license.txt'))
|
||||
const manifestPath=path.join(target,'src/manifest.json'),manifest=JSON.parse(fs.readFileSync(manifestPath,'utf8'))
|
||||
manifest.router.pages.keyboard={component:'index'}
|
||||
fs.writeFileSync(manifestPath,JSON.stringify(manifest,null,2)+'\n')
|
||||
console.log('Installed canonical offline keyboard:',manifest.package)
|
||||
@@ -0,0 +1,3 @@
|
||||
import router from '@system.router'
|
||||
import {clearPrivateInputs} from './common/ime-lifecycle.js'
|
||||
export default {onCreate(){console.info('Crab RTOS input ready')},onHide(){clearPrivateInputs(router)}}
|
||||
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 kqakqakqa
|
||||
Copyright (c) 2026 crabKun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
之后 宽度: | 高度: | 大小: 720 B |
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
之后 宽度: | 高度: | 大小: 505 B |
|
之后 宽度: | 高度: | 大小: 479 B |
|
之后 宽度: | 高度: | 大小: 472 B |
|
之后 宽度: | 高度: | 大小: 522 B |
|
之后 宽度: | 高度: | 大小: 640 B |
|
之后 宽度: | 高度: | 大小: 971 B |
|
之后 宽度: | 高度: | 大小: 729 B |
|
之后 宽度: | 高度: | 大小: 413 B |
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013 Sun Junyi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,109 @@
|
||||
/* RTOS adaptation of CrabKeyboard, MIT. Original authors kqakqakqa and crabKun.
|
||||
* Full V5 dictionary, prefix consumption and local preference ordering retained.
|
||||
* New: T9 decoding, paged complete candidates and Unicode-safe editing.
|
||||
*/
|
||||
const GROUPS = ['abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
|
||||
// Adjacent QWERTY pairs used by the public 14-key layout. One token per key.
|
||||
export const KEY14_GROUPS = ['qw','er','ty','ui','op','as','df','gh','jk','l','zx','cv','bn','m']
|
||||
const KEY14_CODES='0123456789abcd'
|
||||
export function code14Of(text){
|
||||
let result=''
|
||||
for(const ch of String(text||'').toLowerCase()){
|
||||
const index=KEY14_GROUPS.findIndex(group=>group.indexOf(ch)>=0)
|
||||
if(index<0)return ''
|
||||
result+=KEY14_CODES[index]
|
||||
}
|
||||
return result
|
||||
}
|
||||
export function display14(raw){return (raw.length>6?'… ':'')+Array.from(raw.slice(-6)).map(code=>KEY14_GROUPS[KEY14_CODES.indexOf(code)]||'').join(' ').toUpperCase()}
|
||||
export function digitsOf(text) {
|
||||
let result=''
|
||||
for (const ch of text.toLowerCase()) {
|
||||
const index=GROUPS.findIndex(group=>group.indexOf(ch)>=0)
|
||||
if(index<0)return ''
|
||||
result+=String(index+2)
|
||||
}
|
||||
return result
|
||||
}
|
||||
export function chars(text){return Array.from(String(text||''))}
|
||||
export function edit(text,cursor,insertion,maxLength) {
|
||||
const value=chars(text), at=Math.max(0,Math.min(value.length,cursor))
|
||||
const room=Math.max(0,maxLength-value.length), added=chars(insertion).slice(0,room)
|
||||
return {text:value.slice(0,at).concat(added,value.slice(at)).join(''),cursor:at+added.length,limited:added.length<chars(insertion).length}
|
||||
}
|
||||
export function erase(text,cursor) {
|
||||
const value=chars(text),at=Math.max(0,Math.min(value.length,cursor))
|
||||
if(at)value.splice(at-1,1)
|
||||
return {text:value.join(''),cursor:Math.max(0,at-1)}
|
||||
}
|
||||
export function preview(text,cursor,secret) {
|
||||
const value=chars(text),at=Math.max(0,Math.min(value.length,cursor))
|
||||
const left=value.slice(Math.max(0,at-15),at),right=value.slice(at,at+7)
|
||||
return (at>15?'…':'')+(secret?'•'.repeat(left.length):left.join(''))+'│'+(secret?'•'.repeat(right.length):right.join(''))+(at+7<value.length?'…':'')
|
||||
}
|
||||
export function sanitizePreferences(input) {
|
||||
const result={}
|
||||
if(!input||typeof input!=='object'||Array.isArray(input))return result
|
||||
Object.keys(input).filter(key=>/^(?:[a-z2-9]{1,32}|k14:[0-9a-d]{1,32})$/.test(key)).slice(-100).forEach(key=>{
|
||||
if(!Array.isArray(input[key]))return
|
||||
result[key]=input[key].filter(x=>x&&typeof x.word==='string'&&chars(x.word).length<=32&&Number.isInteger(x.consume)&&x.consume>0&&x.consume<=32).slice(0,3).map(x=>({word:x.word,consume:x.consume}))
|
||||
})
|
||||
return result
|
||||
}
|
||||
export function learn(preferences,input,candidate) {
|
||||
const result=sanitizePreferences(preferences)
|
||||
const previous=Array.isArray(result[input])?result[input]:[]
|
||||
delete result[input]
|
||||
result[input]=[{word:candidate.word,consume:candidate.consume}].concat(previous.filter(x=>x.word!==candidate.word||x.consume!==candidate.consume)).slice(0,3)
|
||||
const keys=Object.keys(result)
|
||||
if(keys.length>100)delete result[keys[0]]
|
||||
return result
|
||||
}
|
||||
|
||||
export function createDictionary(read) {
|
||||
// Small shards and a bounded LRU avoid parsing the whole lexicon on an MCU.
|
||||
const cache=[],pending={};let manifest=null
|
||||
async function load(name) {
|
||||
const existing=cache.find(x=>x.name===name)
|
||||
if(existing)return existing.data
|
||||
if(pending[name])return pending[name]
|
||||
pending[name]=(async()=>{
|
||||
const text=await read('/assets/ime-dict/'+name+'.json')
|
||||
const data=typeof text==='string'?JSON.parse(text):text
|
||||
const size=typeof text==='string'?text.length:0
|
||||
cache.push({name,data,size});while(cache.length>4||cache.reduce((sum,x)=>sum+x.size,0)>90000)cache.shift()
|
||||
return data
|
||||
})()
|
||||
try{return await pending[name]}finally{delete pending[name]}
|
||||
}
|
||||
return {
|
||||
async lookup(raw,t9,preferences) {
|
||||
const input=String(raw||'').toLowerCase()
|
||||
const dual=t9==='14',ambiguous=!!t9
|
||||
if(!(dual?/^[0-9a-d]{1,32}$/:t9?/^[2-9]{1,32}$/:/^[a-z]{1,32}$/).test(input))return []
|
||||
const digits=ambiguous?input:digitsOf(input)
|
||||
const merged={},frequencies={}
|
||||
function merge(data){Object.assign(merged,data.entries);Object.assign(frequencies,data.frequencies)}
|
||||
if(!manifest){const meta=await read('/assets/ime-dict/meta.json');manifest=typeof meta==='string'?JSON.parse(meta):meta}
|
||||
const names=[]
|
||||
const prefixLength=dual?3:4
|
||||
for(let length=1;length<=Math.min(prefixLength-1,digits.length);length++)names.push((dual?'ds':'s')+digits.slice(0,length))
|
||||
if(digits.length>=prefixLength)names.push((dual?'d':'')+digits.slice(0,prefixLength))
|
||||
for(const name of names)if(manifest.shards.indexOf(name)>=0)try{merge(await load(name))}catch(error){throw new Error('词库读取失败')}
|
||||
const matching=Object.keys(merged).filter(key=>input.indexOf(dual?code14Of(key):t9?digitsOf(key):key)===0)
|
||||
matching.sort((a,b)=>b.length-a.length||(a<b?-1:a>b?1:0))
|
||||
const result=[],seen={}
|
||||
for(const key of matching)for(const word of merged[key]){
|
||||
const identity=word+'@'+key.length
|
||||
if(!seen[identity]){seen[identity]=true;result.push({word,pinyin:key,consume:key.length})}
|
||||
}
|
||||
const preferenceKey=dual?'k14:'+input:input
|
||||
const prefs=preferences&&Array.isArray(preferences[preferenceKey])?preferences[preferenceKey]:[]
|
||||
const rank=item=>{const i=prefs.findIndex(x=>x.word===item.word&&x.consume===item.consume);return i<0?100:i}
|
||||
// Rank only real dictionary results: a damaged preference cannot inject text.
|
||||
return result.map((item,index)=>({item,index})).sort((a,b)=>rank(a.item)-rank(b.item)||(ambiguous?(b.item.consume-a.item.consume||(frequencies[b.item.word]||0)-(frequencies[a.item.word]||0)):0)||a.index-b.index).map(x=>x.item)
|
||||
},
|
||||
clear(){cache.length=0;manifest=null},
|
||||
get cacheSize(){return cache.length}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
// Some vendor runtimes deliver application hide before the nested page callback.
|
||||
export function clearPrivateInputs(router) {
|
||||
for(const page of router.getPages()) {
|
||||
if(page.secret&&typeof page.clearPrivate==='function')page.clearPrivate()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,145 @@
|
||||
<template>
|
||||
<div class="ime-surface">
|
||||
<div class="ime">
|
||||
<div class="top"><button id="ime-cancel" class="cancel icon-button" on:click="cancel"><image class="icon" src="/assets/ime-icons/close-line.png" /></button><p class="title">{{title}}</p><p class="count">{{count}} 字</p></div>
|
||||
<button class="preview" on:click="showTools">{{count ? display : '输入文字…'}}</button>
|
||||
<div class="composition"><p class="spelling">{{compositionDisplay || modeLabel}}</p><p class="hint">{{hint}}</p></div>
|
||||
|
||||
<div if="panel === 'keys'" class="body">
|
||||
<div if="mode === 't9' || mode === 'py' || mode === '14' || mode === 'sym' || inputType === 'url'" class="candidates"><button for="item in bar" class="candidate" on:click="choose(item)">{{item.word}}</button><button if="!composition && inputType === 'url'" class="candidate" on:click="insert('https://')">https://</button><button if="!composition && inputType === 'url'" class="candidate" on:click="insert('.com')">.com</button><button if="mode === 'sym'" class="candidate" on:click="symbols">下一组符号 {{symbolPage+1}}/2</button><p if="!total && !busy && mode !== 'sym' && inputType !== 'url'" class="candidate-placeholder">{{secret ? '私密输入' : '选择候选词'}}</p><button if="mode !== 'sym' && total" id="ime-expand" class="more icon-button" on:click="expand"><image class="icon" src="/assets/ime-icons/arrow-down-s-line.png" /></button></div>
|
||||
<div class="keypad">
|
||||
<div for="row in layoutRows" class="keyrow" :style="row.style"><button for="key in row.keys" class="key" :style="keyStyle" on:click="press(key.value)"><p class="key-label" :style="labelStyle">{{key.label}}</p><p if="key.sub" class="key-sub">{{key.sub}}</p></button></div>
|
||||
</div>
|
||||
<div class="modes"><button id="ime-chinese" on:click="chinese">{{mode === 't9' ? '26键' : '九宫'}}</button><button id="ime-14" :style="mode === '14' ? 'color:#2867D9' : ''" on:click="fourteen">14键</button><button on:click="english">{{upper ? 'ABC' : 'abc'}}</button><button on:click="numbers">123</button><button on:click="symbols">符号</button><button id="ime-tools" class="icon-button" on:click="showTools"><image class="icon small-icon" src="/assets/ime-icons/edit-2-line.png" /></button></div>
|
||||
<div class="bottom"><button id="ime-space" on:click="space">空格</button><button id="ime-delete" class="delete icon-button" on:touchstart="startDelete" on:touchend="endDelete"><image class="icon" src="/assets/ime-icons/delete-back-2-line.png" /></button><button id="ime-finish" class="done icon-button" on:click="finish"><image class="icon" src="/assets/ime-icons/check-line.png" /></button></div>
|
||||
</div>
|
||||
|
||||
<div if="panel === 'candidates'" class="body expanded">
|
||||
<p class="page-info">完整候选 · {{total}} 项 · {{candidatePage + 1}}/{{pageCount}}</p>
|
||||
<div class="full-list"><button for="item in visibleCandidates" class="full-candidate" on:click="choose(item)"><p class="word">{{item.word}}</p><p class="reading">{{item.pinyin}}</p></button><p if="total === 0" class="empty">{{busy ? '正在查词…' : '继续输入拼音后查看候选'}}</p></div>
|
||||
<div class="pager"><button id="ime-page-prev" class="icon-button" on:click="previousPage"><image class="icon" src="/assets/ime-icons/arrow-left-s-line.png" /></button><button id="ime-page-next" class="icon-button" on:click="nextPage"><image class="icon" src="/assets/ime-icons/arrow-right-s-line.png" /></button></div>
|
||||
<div class="bottom"><button id="ime-back" class="icon-button" on:click="closePanel"><image class="icon" src="/assets/ime-icons/keyboard-box-line.png" /></button><button id="ime-delete" class="delete icon-button" on:click="backspace"><image class="icon" src="/assets/ime-icons/delete-back-2-line.png" /></button><button id="ime-finish" class="done icon-button" on:click="finish"><image class="icon" src="/assets/ime-icons/check-line.png" /></button></div>
|
||||
</div>
|
||||
|
||||
<div if="panel === 'tools'" class="body tools">
|
||||
<p class="page-info">{{secret ? '私密输入 · 不学习、不保存' : '光标编辑 · 输入仅保留在本机'}}</p>
|
||||
<div class="toolrow"><button on:click="cursorLeft">← 左移</button><button on:click="cursorRight">右移 →</button></div>
|
||||
<div class="toolrow"><button on:click="cursorStart">到开头</button><button on:click="cursorEnd">到末尾</button></div>
|
||||
<div class="toolrow"><button on:click="newline">换行</button><button on:click="rawInput">拼音上屏</button></div>
|
||||
<div class="toolrow"><button on:click="toggleLearning">{{learning ? '学习:开' : '学习:关'}}</button><button on:click="clearPreferences">清除学习</button></div>
|
||||
<div class="toolrow"><button class="danger" on:click="clearText">{{clearArmed ? '确认清空' : '清空全文'}}</button><button on:click="backspace">删除一字</button></div>
|
||||
<div class="bottom"><button id="ime-back" class="icon-button" on:click="closePanel"><image class="icon" src="/assets/ime-icons/keyboard-box-line.png" /></button><button id="ime-finish" class="done icon-button" on:click="finish"><image class="icon" src="/assets/ime-icons/check-line.png" /></button></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style>
|
||||
.ime-surface{display:flex;flex-direction:column;width:100%;height:100%;background-color:#ECEEF2}
|
||||
.ime{display:flex;flex-direction:column;align-items:stretch;width:100%;height:100%;padding:14px 10px;background-color:#ECEEF2;color:#20232B}
|
||||
p{margin:0;color:#20232B;font-size:.62rem}button{padding:0;margin:3px;border-radius:12px;color:#20232B;background-color:#FFFFFF;font-size:.65rem;flex-shrink:0}button:active{background-color:#D7E5FF}
|
||||
.icon-button{display:flex;align-items:center;justify-content:center}.icon{width:24px;height:24px;object-fit:contain}.small-icon{width:20px;height:20px}
|
||||
.top,.composition,.candidates,.keyrow,.modes,.bottom,.pager,.toolrow{display:flex;flex-direction:row;align-items:center;justify-content:center;flex-shrink:0}
|
||||
.top{height:27px}.cancel{width:44px;height:27px;background-color:transparent;color:#2867D9;font-size:.53rem}.title{flex:1;text-align:center;font-size:.55rem;color:#737984}.count{width:44px;font-size:.4rem;text-align:right;color:#9297A1}
|
||||
.preview{height:43px;margin:7px 7px 3px;padding:0 14px;background-color:#FFFFFF;text-align:left;font-size:.82rem;color:#20232B;border-radius:13px}
|
||||
.composition{height:24px;padding:0 12px}.spelling{flex:1;color:#2867D9;font-size:.55rem}.hint{color:#8B909A;font-size:.38rem;text-align:right}
|
||||
.body,.keypad,.full-list{display:flex;flex-direction:column;align-items:stretch;min-height:0}.body{flex:1;justify-content:center}.keypad{flex-shrink:0}
|
||||
.candidates{height:42px;margin:0 4px 4px;background-color:#F8F9FB;border-radius:12px}.candidate{flex:1;min-width:45px;height:36px;background-color:transparent;color:#20232B;font-size:.78rem}.candidate-placeholder{flex:1;text-align:center;color:#A4A9B2;font-size:.45rem}.more{width:46px;height:36px;background-color:transparent;font-size:.5rem;color:#2867D9}
|
||||
.keyrow{align-items:stretch;align-self:center;width:100%}.key{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;height:52px;min-width:0;background-color:#FFFFFF;border-radius:12px}.key-label{font-size:.88rem;color:#22252E}.key-sub{font-size:.35rem;color:#9DA2AD;margin-top:1px}
|
||||
.modes{height:36px;margin-top:3px}.modes button{flex:1;height:31px;background-color:transparent;font-size:.53rem;color:#636A77}
|
||||
.bottom{height:41px;margin-top:2px}.bottom button{flex:1;height:37px;font-size:.6rem;background-color:#FFFFFF}.bottom .done{background-color:#2867D9;color:#FFFFFF}.bottom .delete{background-color:#D9DDE4;color:#515866}
|
||||
.page-info{text-align:center;color:#8B919D;font-size:.45rem;margin:5px 0;flex-shrink:0}.full-list{flex:1;justify-content:center}.full-candidate{display:flex;flex-direction:row;align-items:center;justify-content:space-between;height:41px;margin:4px 5px;padding:0 16px;background-color:#FFFFFF}.word{font-size:.8rem;color:#22252E}.reading{font-size:.4rem;color:#A1A7B1;margin-left:7px}.empty{margin:15px 8px;color:#9299A5;text-align:center}
|
||||
.pager{height:38px}.pager button{flex:1;height:34px;background-color:transparent;color:#2867D9;font-size:.55rem}.toolrow button{flex:1;height:40px;font-size:.57rem}.tools{justify-content:center}.tools .danger{color:#C85656}.tools .bottom{margin-top:8px}
|
||||
@media (shape:circle){.ime{padding:30px 8px}.top{align-self:center;width:186px;height:24px}.cancel{height:24px}.preview{align-self:center;width:280px;height:32px;margin-top:5px}.composition{align-self:center;width:300px;height:19px}.candidates{align-self:center;width:352px;height:38px}.candidate{height:34px}.more{height:34px}.keypad{align-self:center;width:376px}.key{height:49px}.modes{align-self:center;width:286px;height:33px}.modes button{height:29px}.bottom{align-self:center;width:200px;height:38px}.bottom button{height:34px}.full-list{align-self:center;width:320px}.full-candidate{height:37px;margin:2px 5px}.pager{align-self:center;width:276px}.toolrow{align-self:center;width:300px}.toolrow button{height:35px}.tools .page-info{align-self:center;width:280px}.tools .bottom{margin-top:4px}.full-candidate .word{font-size:.7rem}}
|
||||
</style>
|
||||
<script>
|
||||
import file from '@system.file'
|
||||
import storage from '@system.storage'
|
||||
import router from '@system.router'
|
||||
import {createDictionary,chars,edit,erase,preview,learn,sanitizePreferences,KEY14_GROUPS,display14} from '../common/ime-engine.js'
|
||||
|
||||
const LETTERS=['qwertyuiop','asdfghjkl','zxcvbnm']
|
||||
const SYMBOLS=['!"#$%&',"'()*+,",'-./:;<','=>?@[\\',']^_`{|','}~,。?!']
|
||||
function keys(rows){return rows.map(row=>Array.from(row).map(value=>({label:value,value:value,sub:''})))}
|
||||
export default {
|
||||
data:{initial:'',title:'蟹蟹输入',inputType:'text',maxLength:2048,allowNewline:true,secret:false,text:'',cursor:0,composition:'',compositionDisplay:'',display:'│',count:0,limit:2048,mode:'t9',modeLabel:'九宫拼音',upper:false,symbolPage:0,panel:'keys',keyRows:[],layoutRows:[],keyStyle:'',labelStyle:'',bar:[],visibleCandidates:[],total:0,candidatePage:0,pageCount:1,busy:false,hint:'离线全量词库',learning:false,clearArmed:false},
|
||||
dictionary:null,preferences:{},allCandidates:[],active:true,life:null,requestId:0,lookupTimer:null,repeatTimer:null,repeatDelay:null,result:null,original:'',
|
||||
onInit(){
|
||||
this.life={active:true,id:0};this.secret=!!this.secret||this.inputType==='password'
|
||||
this.limit=Math.floor(Math.max(1,Math.min(4096,Number(this.maxLength)||2048)))
|
||||
this.text=chars(this.initial).slice(0,this.limit).join('');this.original=this.text;this.cursor=chars(this.text).length
|
||||
try{this.preferences=sanitizePreferences(storage.get('crab.ime.preferences'));this.learning=!this.secret&&storage.get('crab.ime.learning')===true}catch(error){this.preferences={};this.learning=false}
|
||||
this.dictionary=createDictionary(uri=>file.readText({uri}))
|
||||
this.mode=this.inputType==='number'||this.inputType==='pin'?'num':this.inputType==='url'||this.inputType==='password'?'en':'t9'
|
||||
this.renderKeys();this.updateDisplay()
|
||||
},
|
||||
onShow(){this.active=true;this.life.active=true;if(this.composition)this.schedule()},
|
||||
onHide(){this.active=false;this.life.active=false;this.invalidate();this.stopRepeat();if(this.secret)this.clearPrivate()},
|
||||
clearPrivate(){this.active=false;this.life.active=false;this.invalidate();this.stopRepeat();this.text='';this.initial='';this.original='';this.composition='';this.allCandidates=[];this.bar=[];this.visibleCandidates=[];this.total=0;this.updateDisplay()},
|
||||
onDestroy(){this.active=false;this.life.active=false;this.invalidate();this.stopRepeat();if(this.dictionary)this.dictionary.clear();this.allCandidates=[];this.preferences={};this.text='';this.initial='';this.original='';router.close(this.$page,this.result||{accepted:false});this.result=null},
|
||||
invalidate(){this.requestId++;this.life.id=this.requestId;if(this.lookupTimer!==null){clearTimeout(this.lookupTimer);this.lookupTimer=null}this.busy=false},
|
||||
updateDisplay(){this.count=chars(this.text).length;this.display=preview(this.text,this.cursor,this.secret);this.compositionDisplay=this.mode==='14'?display14(this.composition):this.composition},
|
||||
renderKeys(){
|
||||
if(this.mode==='t9')this.keyRows=[[{label:'标点',value:'symbols',sub:'1'},{label:'ABC',value:'2',sub:'2'},{label:'DEF',value:'3',sub:'3'}],[{label:'GHI',value:'4',sub:'4'},{label:'JKL',value:'5',sub:'5'},{label:'MNO',value:'6',sub:'6'}],[{label:'PQRS',value:'7',sub:'7'},{label:'TUV',value:'8',sub:'8'},{label:'WXYZ',value:'9',sub:'9'}]]
|
||||
else if(this.mode==='num')this.keyRows=keys(['123','456','789','.0-'])
|
||||
else if(this.mode==='sym')this.keyRows=keys(SYMBOLS.slice(this.symbolPage*3,this.symbolPage*3+3))
|
||||
else if(this.mode==='14'){const all=KEY14_GROUPS.map((group,index)=>({label:group.toUpperCase(),value:'0123456789abcd'[index],sub:''}));this.keyRows=[all.slice(0,5),all.slice(5,10),all.slice(10)]}
|
||||
else this.keyRows=keys(LETTERS.map(row=>this.upper&&this.mode==='en'?row.toUpperCase():row))
|
||||
this.keyStyle='height:'+(this.keyRows.length<=3?'49':this.keyRows.length===4?'38':this.keyRows.length===5?'28':'22')+'px'
|
||||
const qwerty=this.mode==='py'||this.mode==='en'
|
||||
this.labelStyle=qwerty?'font-size:22px':this.mode==='14'?'font-size:24px':''
|
||||
this.layoutRows=this.keyRows.map((row,index)=>({keys:row,style:'width:'+(qwerty?['100','94','84'][index]:index===this.keyRows.length-1?'91':'100')+'%'}))
|
||||
this.modeLabel={t9:'九宫拼音',py:'26键全拼 · v 代表 ü','14':'14键拼音',en:this.upper?'英文大写':'英文小写',num:'数字',sym:'符号 · '+(this.symbolPage+1)+'/2'}[this.mode]
|
||||
this.compositionDisplay=this.mode==='14'?display14(this.composition):this.composition
|
||||
},
|
||||
setMode(mode){this.stopRepeat();if(this.composition&&mode!==this.mode){if(this.mode==='t9'||mode==='t9'||this.mode==='14'||mode==='14'){this.hint='请先选择候选词再切换';return}if(mode!=='py'&&!this.rawInput())return}this.mode=mode;this.panel='keys';this.renderKeys();this.schedule()},
|
||||
chinese(){this.setMode(this.mode==='t9'?'py':'t9')},fourteen(){this.setMode('14')},english(){if(this.mode==='en')this.upper=!this.upper;this.setMode('en')},numbers(){this.setMode('num')},symbols(){if(this.mode==='sym'){this.symbolPage=1-this.symbolPage;this.renderKeys()}else{this.symbolPage=0;this.setMode('sym')}},
|
||||
press(value){this.clearArmed=false;if(value==='symbols'){this.symbols();return}if(this.mode==='t9'||this.mode==='py'||this.mode==='14'){if(this.composition.length>=32){this.hint='每段最多 32 位';return}this.composition+=value.toLowerCase();this.schedule()}else this.insert(value)},
|
||||
insert(value){
|
||||
let insertion=String(value)
|
||||
if(this.inputType==='number')insertion=insertion.replace(/[^0-9.\-]/g,'')
|
||||
if(this.inputType==='pin')insertion=insertion.replace(/[^0-9]/g,'')
|
||||
if(this.inputType==='url')insertion=insertion.replace(/\s/g,'')
|
||||
if(!this.allowNewline)insertion=insertion.replace(/[\r\n]/g,'')
|
||||
const next=edit(this.text,this.cursor,insertion,this.limit);this.text=next.text;this.cursor=next.cursor;this.updateDisplay();this.hint=next.limited?'已达字数上限':'离线输入'
|
||||
return !next.limited
|
||||
},
|
||||
schedule(){
|
||||
this.compositionDisplay=this.mode==='14'?display14(this.composition):this.composition
|
||||
this.invalidate();this.allCandidates=[];this.bar=[];this.visibleCandidates=[];this.total=0;this.pageCount=1;this.candidatePage=0
|
||||
if(!this.composition||!this.active)return
|
||||
const id=this.requestId;this.busy=true;this.hint='正在查词…'
|
||||
this.lookupTimer=setTimeout(()=>{this.lookupTimer=null;this.query(id)},45)
|
||||
},
|
||||
async query(id){
|
||||
const raw=this.composition,life=this.life
|
||||
try{const result=await this.dictionary.lookup(raw,this.mode==='14'?'14':this.mode==='t9',this.learning?this.preferences:{})
|
||||
if(!life.active||id!==life.id)return
|
||||
this.allCandidates=result;this.total=result.length;this.bar=result.slice(0,3);this.pageCount=Math.max(1,Math.ceil(result.length/4));this.pageCandidates();this.hint=result.length?result.length+' 个候选':'暂无匹配 · 可退格修改'
|
||||
}catch(error){if(life.active&&id===life.id)this.hint='词库暂不可用,可切换英文输入'}
|
||||
finally{if(life.active&&id===life.id)this.busy=false}
|
||||
},
|
||||
pageCandidates(){this.visibleCandidates=this.allCandidates.slice(this.candidatePage*4,this.candidatePage*4+4)},
|
||||
choose(item){
|
||||
if(this.busy||!this.composition||!this.allCandidates.some(x=>x.word===item.word&&x.pinyin===item.pinyin&&x.consume===item.consume))return
|
||||
if(chars(this.text).length+chars(item.word).length>this.limit){this.hint='剩余空间不足,未截断候选词';return}
|
||||
const raw=this.composition;this.insert(item.word)
|
||||
if(this.learning&&!this.secret){try{this.preferences=learn(this.preferences,this.mode==='14'?'k14:'+raw:raw,item);storage.set('crab.ime.preferences',this.preferences)}catch(error){this.learning=false}}
|
||||
this.composition=raw.slice(item.consume);this.panel='keys';this.schedule()
|
||||
},
|
||||
expand(){this.panel='candidates';this.pageCandidates()},previousPage(){this.candidatePage=Math.max(0,this.candidatePage-1);this.pageCandidates()},nextPage(){this.candidatePage=Math.min(this.pageCount-1,this.candidatePage+1);this.pageCandidates()},
|
||||
backspace(){this.clearArmed=false;if(this.composition){this.composition=this.composition.slice(0,-1);this.schedule()}else{const next=erase(this.text,this.cursor);this.text=next.text;this.cursor=next.cursor;this.updateDisplay()}},
|
||||
startDelete(){this.stopRepeat();this.backspace();this.repeatDelay=setTimeout(()=>{this.repeatDelay=null;this.repeatTimer=setInterval(()=>this.backspace(),120)},450)},
|
||||
endDelete(){this.stopRepeat()},
|
||||
stopRepeat(){if(this.repeatTimer!==null){clearInterval(this.repeatTimer);this.repeatTimer=null}if(this.repeatDelay!==null){clearTimeout(this.repeatDelay);this.repeatDelay=null}},
|
||||
space(){if(this.composition){if(!this.busy&&this.allCandidates.length)this.choose(this.allCandidates[0]);else this.hint='请等待候选或修改拼音'}else this.insert(' ')},
|
||||
rawInput(){if((this.mode==='t9'||this.mode==='14')&&this.composition){this.hint='编码请先选择候选';return false}if(this.composition){if(!this.insert(this.composition))return false;this.composition='';this.schedule()}return true},
|
||||
showTools(){this.stopRepeat();this.panel='tools';this.clearArmed=false},closePanel(){this.panel='keys';this.clearArmed=false},
|
||||
cursorLeft(){this.cursor=Math.max(0,this.cursor-1);this.updateDisplay()},cursorRight(){this.cursor=Math.min(chars(this.text).length,this.cursor+1);this.updateDisplay()},cursorStart(){this.cursor=0;this.updateDisplay()},cursorEnd(){this.cursor=chars(this.text).length;this.updateDisplay()},
|
||||
newline(){if(this.allowNewline&&this.inputType!=='url'&&this.inputType!=='number'&&!this.secret)this.insert('\n');else this.hint='此输入项不支持换行'},
|
||||
clearText(){if(!this.clearArmed){this.clearArmed=true;this.hint='再次点击确认清空';return}this.text='';this.cursor=0;this.composition='';this.clearArmed=false;this.schedule();this.updateDisplay()},
|
||||
toggleLearning(){if(this.secret){this.hint='私密输入不记录学习';return}try{storage.set('crab.ime.learning',!this.learning);this.learning=!this.learning;this.schedule()}catch(error){this.learning=false;this.hint='本机存储不可用,学习已关闭'}},
|
||||
clearPreferences(){try{storage.delete('crab.ime.preferences');this.preferences={};this.schedule();this.hint='本应用学习记录已清除'}catch(error){this.hint='学习清除失败,请稍后重试'}},
|
||||
finish(){this.stopRepeat();if(this.composition){this.hint='请先选择候选词或在编辑中上屏拼音';this.panel='keys';return}this.result={accepted:true,text:this.text};router.close(this.$page,this.result)},
|
||||
cancel(){this.result={accepted:false};router.close(this.$page,this.result)}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,32 @@
|
||||
<template>
|
||||
<div class="page-surface">
|
||||
<div class="page">
|
||||
<p class="brand">蟹蟹输入</p><p class="subtitle">随手写,轻松输入</p>
|
||||
<button class="document" on:click="editText"><p class="content">{{snippet || '写点什么…'}}</p><p class="hint">{{length ? length + ' 字 · 轻点继续编辑' : '轻点开始输入'}}</p></button>
|
||||
<button class="primary" on:click="editText">开始输入</button>
|
||||
<div class="actions"><button on:click="saveDraft">{{saved ? '已保存' : '保存草稿'}}</button><button on:click="numberDemo">数字输入</button><button on:click="passwordDemo">私密输入</button></div>
|
||||
<button class="help" on:click="toggleHelp">使用说明与许可</button>
|
||||
<scroll if="help" class="explanation" scrollbar><div><p>九宫拼音:连续点击字母所在数字键,选择词后剩余编码继续匹配。更多可逐页查看完整候选;全拼用 v 表示 ü。英文、数字、符号均可切换。</p><p>点击文字预览进入光标编辑。完成回填,取消保留原文。学习默认关闭,可单独开启或清除;私密输入不学习、不保存。</p><p>基于 CrabKeyboard,MIT,原作者 kqakqakqa、crabKun。此应用仅能在已接入的 Glyphix 应用内弹出键盘;系统级输入法需厂商固件支持。</p></div></scroll>
|
||||
<p class="status">{{status}}</p>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<style>
|
||||
.page-surface{display:flex;flex-direction:column;width:100%;height:100%;background-color:#F2F3F6}
|
||||
.page{display:flex;flex-direction:column;align-items:stretch;height:100%;padding:24px;background-color:#F2F3F6}.brand{color:#22252E;font-size:1.06rem;text-align:center;margin:5px 0}.subtitle{color:#9096A1;font-size:.47rem;text-align:center;margin:3px 0 18px}button{margin:4px;padding:8px;border-radius:14px;background-color:#FFFFFF;color:#535B69;font-size:.56rem;min-height:41px;flex-shrink:0}button:active{background-color:#D7E5FF}.document{display:flex;flex-direction:column;justify-content:center;flex:1;min-height:65px;background-color:#FFFFFF;padding:17px;margin-bottom:13px}.content{color:#343944;font-size:.82rem;margin:5px 0;text-align:center}.hint{color:#A0A6B1;font-size:.43rem;text-align:center;margin:8px}.actions{display:flex;flex-direction:row;margin-top:5px}.actions button{flex:1;font-size:.48rem}.primary{min-height:47px;background-color:#2867D9;color:#FFFFFF;font-size:.68rem}.help{background-color:transparent;font-size:.46rem;color:#8A929F;min-height:28px}.status{font-size:.4rem;color:#A1A7B1;text-align:center;margin:4px}.explanation{flex:1;min-height:0}.explanation div{display:flex;flex-direction:column}.explanation p{font-size:.55rem;color:#535B69;margin:5px}
|
||||
@media (shape:circle){.page{padding:36px 35px 31px}.document{max-height:128px}.primary{align-self:center;width:280px;min-height:43px}.actions{align-self:center;width:296px}.help{align-self:center;width:230px}.brand{font-size:.95rem}}
|
||||
</style>
|
||||
<script>
|
||||
import router from '@system.router'
|
||||
import storage from '@system.storage'
|
||||
import {chars} from '../common/ime-engine.js'
|
||||
export default {
|
||||
data:{text:'',snippet:'',length:0,status:'离线输入 · 内容留在本机',saved:false,help:false},opening:false,alive:true,
|
||||
onInit(){try{const draft=storage.get('crab.draft');if(typeof draft==='string'){this.text=chars(draft).slice(0,2048).join('');this.refresh()}}catch(error){this.status='本机草稿暂不可用,仍可离线输入'}},
|
||||
refresh(){this.length=chars(this.text).length;this.snippet=chars(this.text).slice(0,48).join('')+(this.length>48?'…':'')},
|
||||
onDestroy(){this.alive=false;this.text=''},
|
||||
async open(type){if(this.opening)return;this.opening=true;try{const result=await router.push({uri:'keyboard',params:{initial:type==='text'?this.text:'',title:type==='password'?'私密输入':type==='number'?'数字输入':'蟹蟹输入',inputType:type,secret:type==='password',maxLength:type==='number'?32:2048,allowNewline:type==='text'}});if(!this.alive)return;if(result&&result.accepted){if(type==='text'){this.text=result.text;this.refresh();this.saved=false;this.status='输入完成 · 可继续编辑或保存草稿'}else this.status=type==='password'?'私密输入完成,内容已丢弃':'数字输入完成:'+result.text}}finally{this.opening=false}},
|
||||
editText(){this.open('text')},passwordDemo(){this.open('password')},numberDemo(){this.open('number')},
|
||||
saveDraft(){try{storage.set('crab.draft',this.text);this.saved=true;this.status='草稿仅保存在本应用'}catch(error){this.saved=false;this.status='草稿保存失败,内容仍保留在本次编辑中'}},toggleHelp(){this.help=!this.help}
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"package": "com.sydxky.rtos.inputmethod",
|
||||
"name": "蟹蟹输入",
|
||||
"icon": "/assets/icon.png",
|
||||
"versionName": "1.1.0",
|
||||
"versionCode": 10100,
|
||||
"features": [],
|
||||
"router": {"entry": "main", "pages": {"main": {"component": "index"}, "keyboard": {"component": "index"}}},
|
||||
"config": {"designWidth": 410}
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
import fs from 'node:fs'
|
||||
import vm from 'node:vm'
|
||||
import assert from 'node:assert/strict'
|
||||
import * as engine from '../src/common/ime-engine.js'
|
||||
const ux=fs.readFileSync(new URL('../src/keyboard/index.ux',import.meta.url),'utf8')
|
||||
const source=ux.match(/<script>([\s\S]*?)<\/script>/)[1].replace(/^\s*import .+$/gm,'').replace('export default','module.exports=')
|
||||
let count=0
|
||||
const closed=[],store=new Map(),timers=new Map();let nextTimer=1,storageFails=false
|
||||
function check(ok,label){assert.ok(ok,label);count++}
|
||||
function page(params={}){
|
||||
const module={exports:{}}
|
||||
vm.runInNewContext(source,{module,console,...engine,router:{close(p,r){closed.push(r)}},storage:{get:k=>store.get(k),set:(k,v)=>{if(storageFails)throw Error('storage full');store.set(k,v)},delete:k=>store.delete(k)},file:{readText:async({uri})=>fs.readFileSync(new URL('../src'+uri,import.meta.url),'utf8')},setTimeout:fn=>{const id=nextTimer++;timers.set(id,fn);return id},clearTimeout:id=>timers.delete(id),setInterval:fn=>{const id=nextTimer++;timers.set(id,fn);return id},clearInterval:id=>timers.delete(id)})
|
||||
const p={...module.exports,...JSON.parse(JSON.stringify(module.exports.data)),...params};delete p.data;p.onInit();return p
|
||||
}
|
||||
let p=page();check(p.mode==='t9'&&!p.learning,'T9 large keys, learning opt-in')
|
||||
p.chinese();check(p.keyRows.map(row=>row.map(key=>key.value).join('')).join('/')==='qwertyuiop/asdfghjkl/zxcvbnm','26-key pinyin uses standard QWERTY rows')
|
||||
p.english();check(p.keyRows.map(row=>row.map(key=>key.value).join('')).join('/')==='qwertyuiop/asdfghjkl/zxcvbnm','English uses the same standard QWERTY order')
|
||||
p.fourteen();check(p.mode==='14'&&p.keyRows.map(row=>row.map(key=>key.label).join(' ')).join('/')==='QW ER TY UI OP/AS DF GH JK L/ZX CV BN M','14-key layout matches public grouping')
|
||||
for(const code of engine.code14Of('nihao'))p.press(code)
|
||||
p.invalidate();await p.query(p.requestId)
|
||||
check(p.compositionDisplay==='BN UI GH AS OP'&&p.bar.some(x=>x.word==='你好'),'14-key UX queries and displays paired composition')
|
||||
p.english();check(p.mode==='14'&&p.composition===engine.code14Of('nihao'),'14-key mode switch preserves uncommitted composition')
|
||||
p.rawInput();check(p.text===''&&p.composition===engine.code14Of('nihao'),'14-key tokens never commit as raw letters')
|
||||
p.choose(p.bar.find(x=>x.word==='你好'));check(p.text==='你好'&&!p.composition,'14-key selection commits real dictionary word')
|
||||
p=page()
|
||||
p.press('6');p.press('4');p.press('4');p.press('2');p.press('6');p.invalidate();await p.query(p.requestId)
|
||||
const hello=p.allCandidates.find(x=>x.word==='你好');check(hello,'full T9 phrase candidates')
|
||||
p.choose({...hello});check(p.text==='你好'&&!p.composition,'candidate event payload may be reactive copy')
|
||||
p.finish();check(closed.at(-1).accepted&&closed.at(-1).text==='你好','finish returns text')
|
||||
p=page({initial:'unchanged'});p.insert('!');p.cancel();check(closed.at(-1).accepted===false,'cancel does not return edited text')
|
||||
p=page({inputType:'password',initial:'😀secret'});p.toggleLearning();check(!p.learning&&!p.display.includes('secret'),'password masked and cannot learn');p.onHide();check(!p.text&&!p.initial&&!p.original,'password clears on hide')
|
||||
p=page({initial:'你😀好'});p.cursor=2;p.backspace();check(p.text==='你好','UI Unicode deletion')
|
||||
p.startDelete();check(p.repeatDelay!==null,'delete hold delay starts');p.onHide();check(p.repeatDelay===null&&p.repeatTimer===null,'hide stops repeat timers')
|
||||
p=page();let resolve;p.dictionary={lookup:()=>new Promise(yes=>resolve=yes)};p.composition='64';const pending=p.query(p.requestId);p.onHide();resolve([{word:'你',consume:2,pinyin:'ni'}]);await pending;check(p.total===0,'late dictionary response cannot update hidden page')
|
||||
p=page({maxLength:2,initial:'你'});p.composition='nihao';p.allCandidates=[{word:'你好',consume:5,pinyin:'nihao'}];p.choose(p.allCandidates[0]);check(p.text==='你'&&p.composition==='nihao','candidate is not silently truncated')
|
||||
p.finish();check(p.composition==='nihao','finish does not silently drop uncommitted composition')
|
||||
p=page({inputType:'number'});p.insert('12x😀.3');check(p.text==='12.3','number field filters nonnumeric input')
|
||||
p=page({inputType:'url'});p.insert('https://a b.com');check(p.text==='https://ab.com','URL field filters whitespace')
|
||||
p.symbols();const symbols=p.keyRows.flat().map(x=>x.value);p.symbols();symbols.push(...p.keyRows.flat().map(x=>x.value));check(Array.from({length:94},(_,i)=>String.fromCharCode(i+33)).filter(x=>!/[a-z0-9]/i.test(x)).every(x=>symbols.includes(x)),'all printable ASCII punctuation supported')
|
||||
p.english();p.english();check(p.keyRows.flat().some(x=>x.value==='Z'),'uppercase supported')
|
||||
p=page({initial:'test'});p.clearText();check(p.text==='test'&&p.clearArmed,'destructive clear needs second tap');p.clearText();check(p.text==='','confirmed clear')
|
||||
p.composition='shi';p.schedule();const owned=p.lookupTimer;p.onDestroy();check(!timers.has(owned)&&p.lookupTimer===null,'destroy releases owned lookup timer')
|
||||
p=page();p.learning=true;p.composition='64';p.allCandidates=[{word:'你',pinyin:'ni',consume:2}];storageFails=true;p.choose(p.allCandidates[0]);check(p.text==='你'&&!p.composition&&!p.learning,'storage failure cannot duplicate committed candidate');p.toggleLearning();check(!p.learning,'storage failure leaves learning off');storageFails=false
|
||||
console.log(JSON.stringify({suite:'ime-client',assertions:count,status:'passed'}))
|
||||
@@ -0,0 +1,52 @@
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
import assert from 'node:assert/strict'
|
||||
import {fileURLToPath} from 'node:url'
|
||||
import {createDictionary,digitsOf,code14Of,KEY14_GROUPS,display14,edit,erase,preview,learn,sanitizePreferences,chars} from '../src/common/ime-engine.js'
|
||||
const root=path.resolve(path.dirname(fileURLToPath(import.meta.url)),'../src')
|
||||
let count=0
|
||||
function check(ok,label){assert.ok(ok,label);count++}
|
||||
const dictionary=createDictionary(async uri=>fs.readFileSync(root+uri,'utf8'))
|
||||
const meta=JSON.parse(fs.readFileSync(root+'/assets/ime-dict/meta.json','utf8'))
|
||||
check(meta.keys>10000&&meta.candidates>50000,'full upstream lexicon present')
|
||||
for(const [input,expected] of [['ni','你'],['nihao','你好'],['shijie','世界'],['zhongguo','中国'],['shurufa','输入法'],['beijing','北京']]){
|
||||
const alpha=await dictionary.lookup(input,false,{})
|
||||
check(alpha.some(x=>x.word===expected&&x.consume===input.length),'full pinyin '+input)
|
||||
const t9=await dictionary.lookup(digitsOf(input),true,{})
|
||||
check(t9.some(x=>x.word===expected&&x.consume===input.length),'T9 '+input)
|
||||
}
|
||||
const full=await dictionary.lookup('nihaoshijie',false,{})
|
||||
check(full.some(x=>x.word==='你好'&&x.consume===5),'continuous input consumes matched prefix')
|
||||
check(KEY14_GROUPS.length===14&&KEY14_GROUPS.join('').split('').sort().join('')==='abcdefghijklmnopqrstuvwxyz','14 groups cover each QWERTY letter once')
|
||||
check(code14Of('nihao')==='c3754'&&code14Of('a!')==='','14-key stable token mapping rejects nonletters')
|
||||
for(const [input,expected]of[['nihao','你好'],['shijie','世界'],['zhongguo','中国'],['shurufa','输入法'],['beijing','北京'],['lv','绿']]){
|
||||
const result=await dictionary.lookup(code14Of(input),'14',{})
|
||||
check(result.some(x=>x.word===expected&&x.consume===input.length),'14-key disambiguation '+input)
|
||||
}
|
||||
const pairSentence=await dictionary.lookup(code14Of('nihaoshijie'),'14',{})
|
||||
check(pairSentence.some(x=>x.word==='你好'&&x.consume===5),'14-key continuous input consumes only selected prefix')
|
||||
const pairMany=await dictionary.lookup(code14Of('shi'),'14',{})
|
||||
const fullShi=await dictionary.lookup('shi',false,{})
|
||||
check(fullShi.filter(x=>x.pinyin==='shi').every(x=>pairMany.some(y=>x.word===y.word&&x.consume===y.consume)),'14-key retains every shi candidate')
|
||||
const pairLast=pairMany.at(-1),pairInput=code14Of('shi'),pairPreferences=learn({},'k14:'+pairInput,pairLast)
|
||||
check((await dictionary.lookup(pairInput,'14',pairPreferences))[0].word===pairLast.word,'14-key learned candidate order uses separate scheme namespace')
|
||||
check((await dictionary.lookup(pairInput,'14',{[pairInput]:[{word:pairLast.word,consume:pairLast.consume}]}))[0].word===(await dictionary.lookup(pairInput,'14',{}))[0].word,'plain pinyin preferences cannot leak into 14-key ranking')
|
||||
check((await dictionary.lookup('hello!','14',{})).length===0,'14-key rejects invalid token stream')
|
||||
check(display14('c3754')==='BN UI GH AS OP'&&display14('c3754'.repeat(6)).length<24,'14-key preview displays bounded paired-letter groups')
|
||||
const many=await dictionary.lookup('shi',false,{})
|
||||
const original=JSON.parse(fs.readFileSync(root+'/assets/ime-dict/s'+digitsOf('shi')+'.json','utf8')).entries.shi
|
||||
check(original.every(word=>many.some(x=>x.word===word&&x.consume===3)),'every original shi candidate remains accessible')
|
||||
check(dictionary.cacheSize<=4,'bounded shard cache')
|
||||
check((await dictionary.lookup('not valid!',false,{})).length===0,'reject invalid composition')
|
||||
const candidate=many.at(-1),preferences=learn({},'shi',candidate)
|
||||
check((await dictionary.lookup('shi',false,preferences))[0].word===candidate.word,'real selected candidate learns ordering')
|
||||
const injected=await dictionary.lookup('shi',false,{shi:[{word:'injected',consume:3}]})
|
||||
check(injected.every(x=>x.word!=='injected'),'preference cannot inject nonexistent candidate')
|
||||
check(Object.keys(sanitizePreferences(JSON.parse('{"bad!":[],"shi":[{"word":7}]}'))).length===1,'sanitize persisted preference shape')
|
||||
check(edit('你好',1,'😀',3).text==='你😀好','Unicode insertion at cursor')
|
||||
check(erase('你😀好',2).text==='你好','Unicode backspace preserves surrogate pairs')
|
||||
check(edit('你好',2,'世界',3).limited,'maximum length enforced')
|
||||
check(!preview('my-secret',5,true).includes('secret'),'secret preview masked')
|
||||
check(chars('😀').length===1,'Unicode length counts codepoints')
|
||||
dictionary.clear();check(dictionary.cacheSize===0,'cache release')
|
||||
console.log(JSON.stringify({suite:'ime-engine',assertions:count,keys:meta.keys,candidates:meta.candidates,status:'passed'}))
|
||||
@@ -0,0 +1,39 @@
|
||||
"""Check actual Inspector geometry, including clipping by inner containers."""
|
||||
import json,math,pathlib
|
||||
|
||||
def nodes_of_class(node,kind):
|
||||
result=[node]if node.get('class')==kind else[]
|
||||
for child in node.get('children',[]):result.extend(nodes_of_class(child,kind))
|
||||
return result
|
||||
|
||||
def inspect(path,profile):
|
||||
frame=json.loads(pathlib.Path(path).read_text(encoding='utf-8'))['frames'][-1]
|
||||
pages=[]
|
||||
def visible_pages(node,parent_visible=True):
|
||||
visible=parent_visible and node.get('visible',True)
|
||||
if not visible:return
|
||||
if node.get('class')=='AppletPage':pages.append(node)
|
||||
for child in node.get('children',[]):visible_pages(child,visible)
|
||||
visible_pages(frame['widgets'])
|
||||
page=pages[-1]
|
||||
circle=profile.startswith('round');width=466 if circle else 390;height=466 if circle else 450
|
||||
failures=[];buttons=[];icons=[]
|
||||
def visit(node,ancestors=(),px=0,py=0,visible=True):
|
||||
g=node['geometry'];x=px+g['x'];y=py+g['y'];w=g['w'];h=g['h']
|
||||
visible=visible and node.get('visible',True)
|
||||
if not visible:return
|
||||
box=[x,y,w,h];kind=node['class'];identifier=node.get('id','')
|
||||
if kind in ['Button','ImageBox','Label']:
|
||||
for ancestor in ancestors:
|
||||
ax,ay,aw,ah=ancestor['box']
|
||||
if x<ax-1 or y<ay-1 or x+w>ax+aw+1 or y+h>ay+ah+1:
|
||||
failures.append({'reason':'ancestor clipping','class':kind,'id':identifier,'box':box,'ancestor':ancestor})
|
||||
if kind in ['Button','ImageBox']:
|
||||
radius=max(math.hypot(tx-233,ty-233)for tx in[x,x+w]for ty in[y,y+h])if circle else None
|
||||
if(circle and radius>230)or(not circle and(x<0 or y<0 or x+w>width or y+h>height)):
|
||||
failures.append({'reason':'screen boundary','class':kind,'id':identifier,'box':box,'radius':radius})
|
||||
record={'id':identifier,'box':box,'radius':radius}
|
||||
(buttons if kind=='Button'else icons).append(record)
|
||||
for child in node.get('children',[]):visit(child,ancestors+({'class':kind,'id':identifier,'box':box},),x,y,visible)
|
||||
visit(page)
|
||||
return {'page':page.get('id'),'buttons':len(buttons),'icons':len(icons),'max_button_radius':round(max([b['radius']or 0 for b in buttons],default=0),2),'failures':failures,'passed':not failures}
|
||||
@@ -0,0 +1,76 @@
|
||||
"""Real Glyphix input acceptance on four ordinary/QuickApp profiles."""
|
||||
import argparse,datetime,hashlib,importlib.util,json,os,pathlib,time
|
||||
APP=pathlib.Path(__file__).resolve().parents[1]
|
||||
spec=importlib.util.spec_from_file_location('emu',APP.parent/'tests/emulator-validate.py')
|
||||
emu=importlib.util.module_from_spec(spec);spec.loader.exec_module(emu)
|
||||
emu.APPS=['inputmethod','imefixture']
|
||||
layout_spec=importlib.util.spec_from_file_location('layout',APP/'tests/layout.py')
|
||||
layout=importlib.util.module_from_spec(layout_spec);layout_spec.loader.exec_module(layout)
|
||||
|
||||
def save(path,data):
|
||||
temporary=path.with_suffix('.tmp')
|
||||
with temporary.open('w',encoding='utf-8') as handle:
|
||||
json.dump(data,handle,ensure_ascii=False,indent=2);handle.flush();os.fsync(handle.fileno())
|
||||
os.replace(temporary,path)
|
||||
|
||||
def main():
|
||||
parser=argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument('--profiles',nargs='+',default=emu.PROFILES)
|
||||
parser.add_argument('--work',type=pathlib.Path,required=True)
|
||||
parser.add_argument('--output',type=pathlib.Path,required=True)
|
||||
args=parser.parse_args();args.output.mkdir(parents=True,exist_ok=True)
|
||||
report={'recorded_at':datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8))).isoformat(),'method':'real native @system.test, no networking or real credentials','artifacts':{},'cases':[],'layouts':[]}
|
||||
for profile in args.profiles:
|
||||
process,artifacts=emu.start(profile,args.work,'inputmethod');report['artifacts'][profile]=artifacts
|
||||
def run(name,body,timeout=45):
|
||||
case=profile+'-'+name
|
||||
emu.evaluate('var caseName='+json.dumps(case)+';')
|
||||
emu.evaluate('var caseBody=async function(){'+body+'};')
|
||||
emu.evaluate("tc.testcase(caseName,async function(){await caseBody();console.log('IME_PASS '+caseName)});tc.run(caseName)")
|
||||
logs=[];passed=finished=False;deadline=time.monotonic()+timeout
|
||||
while time.monotonic()<deadline:
|
||||
time.sleep(.1);fresh=[x for x in emu.request('/logs') if x.get('tag')!='eval'];logs.extend(fresh)
|
||||
passed=passed or any('IME_PASS '+case in x.get('body','') for x in fresh)
|
||||
finished=finished or any(x.get('tag')=='tester' and 'testcase '+case+' finished' in x.get('body','') for x in fresh)
|
||||
if passed and finished:break
|
||||
if any('terminated:' in x.get('body','') or 'Uncaught' in x.get('body','') or 'Exception:' in x.get('body','') for x in fresh):break
|
||||
entry={'profile':profile,'case':name,'passed':passed and finished,'checks':[x['body'].strip() for x in logs if 'IME_CHECK ' in x.get('body','')]}
|
||||
report['cases'].append(entry);save(args.output/'results.json',report);save(args.output/(case+'.logs.json'),logs)
|
||||
time.sleep(.35) # Settle native route/layout animations before capturing.
|
||||
emu.snapshot(case,args.output)
|
||||
time.sleep(.25);emu.snapshot(case,args.output) # Read a freshly composited frame.
|
||||
geometry=layout.inspect(args.output/(case+'.tree.json'),profile)
|
||||
report['layouts'].append({'profile':profile,'case':name,**geometry});save(args.output/'results.json',report)
|
||||
print(json.dumps(entry,ensure_ascii=False),flush=True)
|
||||
if not entry['passed']:raise RuntimeError('Native failure '+case+': '+str(logs[-4:]))
|
||||
if not geometry['passed']:raise RuntimeError('Clipped native layout '+case+': '+str(geometry['failures'][:3]))
|
||||
try:
|
||||
emu.evaluate("var router=require('@system.router').default,tc=require('@system.test').default,launch=require('@system.launch').default,root=router.getPage(0),p=null;function check(ok,m){if(!ok)throw new Error(m);console.log('IME_CHECK '+m)};async function click(t){var ids={'取消':'ime-cancel','空格':'ime-space','删除':'ime-delete','完成':'ime-finish','更多':'ime-expand','编辑':'ime-tools','上一页':'ime-page-prev','下一页':'ime-page-next','键盘':'ime-back','返回键盘':'ime-back'};if(ids[t]){await tc.getById(ids[t]).click();return}var pattern=t.split('').map(function(c){return String.fromCharCode(92)+'u'+('0000'+c.charCodeAt(0).toString(16)).slice(-4)}).join('');await tc.getHasText(new RegExp('^'+pattern+'$')).click()}")
|
||||
emu.evaluate("async function ready(){var end=Date.now()+5000;while(p.busy&&Date.now()<end)await tc.wait(.05);check(!p.busy,'dictionary settled')};function reset(){p.invalidate();p.text='';p.cursor=0;p.composition='';p.allCandidates=[];p.bar=[];p.total=0;p.panel='keys';p.mode='t9';p.limit=2048;p.renderKeys();p.updateDisplay()}")
|
||||
run('auto-open',"await tc.getByClass('document').click();await tc.wait(.4);p=router.getPage(1);check(router.getLength()===2&&p.mode==='t9','field opens full screen T9');root.editText();check(router.getLength()===2,'duplicate opener guarded');")
|
||||
run('t9-phrase',"for(var label of ['MNO','GHI','GHI','ABC','MNO'])await click(label);await ready();check(p.bar[0].word==='你好','frequency ranks common phrase first');await click('你好');check(p.text==='你好'&&!p.composition,'native candidate commits phrase');")
|
||||
run('continuous',"reset();p.mode='py';p.renderKeys();p.composition='nihaoshijie';p.schedule();await ready();check(p.allCandidates.some(x=>x.word==='你好'&&x.consume===5),'prefix phrase retained');await click('你好');await ready();check(p.composition==='shijie','only matched pinyin consumed');await click('世界');check(p.text==='你好世界'&&!p.composition,'remaining syllables compose');")
|
||||
run('complete-candidates',"reset();p.mode='py';p.renderKeys();p.composition='shi';p.schedule();await ready();var total=p.total;await click('更多');check(p.visibleCandidates.length===4&&p.pageCount>5,'full list paginated');for(var i=1;i<p.pageCount;i++)await click('下一页');check(p.candidatePage===p.pageCount-1,'last candidate page accessible');")
|
||||
run('candidate-select',"var last=p.visibleCandidates[p.visibleCandidates.length-1];await click(last.word);check(p.text===last.word,'last original candidate can commit');")
|
||||
run('full-pinyin',"reset();await click('26键');check(p.keyRows.map(row=>row.map(key=>key.value).join('')).join('/')==='qwertyuiop/asdfghjkl/zxcvbnm','standard 10-9-7 QWERTY order');for(var letter of ['s','h','u','r','u','f','a'])await click(letter);await ready();check(p.bar.some(x=>x.word==='输入法'),'long phrase in full dictionary');await click('输入法');check(p.text==='输入法','native full pinyin commit');")
|
||||
run('14-key-phrase',"reset();await click('14键');check(p.mode==='14'&&p.keyRows.flat().length===14,'14-key mode has fourteen real buttons');for(var label of ['BN','UI','GH','AS','OP'])await click(label);await ready();check(p.bar.some(x=>x.word==='你好')&&p.allCandidates.some(x=>x.word==='不好'),'paired ambiguity retains both valid phrases');await click('完成');check(router.getLength()===2,'14-key uncommitted input blocks finish');await click('123');check(p.mode==='14'&&p.composition==='c3754','14-key mode switch preserves composition');await click('你好');check(p.text==='你好'&&!p.composition,'native 14-key phrase commit');")
|
||||
run('14-key-continuous',"reset();await click('14键');for(var label of ['BN','UI','GH','AS','OP','AS','GH','UI','JK','UI','ER'])await click(label);await ready();await click('你好');await ready();check(p.composition.length===6,'14-key consumes five matched keys only');await click('世界');check(p.text==='你好世界'&&!p.composition,'14-key continuous phrase commit');")
|
||||
run('14-key-candidates',"reset();await click('14键');for(var label of ['AS','GH','UI'])await click(label);await ready();check(p.total>20,'14-key full dictionary candidates');await click('更多');check(p.visibleCandidates.length===4,'14-key first full candidate page');await click('下一页');check(p.candidatePage===1,'14-key native next candidate page');await click('上一页');check(p.candidatePage===0,'14-key native previous candidate page');var selected=p.visibleCandidates[1];await click(selected.word);check(p.text===selected.word,'14-key expanded candidate commit');")
|
||||
run('english',"reset();await click('abc');check(p.keyRows.map(row=>row.map(key=>key.value).join('')).join('/')==='qwertyuiop/asdfghjkl/zxcvbnm','English follows standard QWERTY');await click('abc');await click('Z');await click('ABC');await click('a');check(p.text==='Za','uppercase and lowercase native keys');")
|
||||
run('symbols',"reset();await click('符号');for(var symbol of ['@','%','&','?',',','。']){if(!p.keyRows.some(row=>row.some(key=>key.value===symbol)))await click('符号');await click(symbol)}check(p.text==='@%&?,。','ASCII and Chinese punctuation native keys');")
|
||||
run('cursor-unicode',"reset();p.text='你😀好';p.cursor=2;p.updateDisplay();await click('编辑');await click('删除一字');check(p.text==='你好','Unicode-safe deletion');await click('到开头');await click('返回键盘');await click('abc');await click('a');check(p.text==='a你好','insertion at moved cursor');")
|
||||
run('hold-delete',"reset();p.mode='en';p.renderKeys();p.text='abcdefghijklmnop';p.cursor=16;p.updateDisplay();await tc.wait(.25);await tc.getById('ime-delete').scroll(0,0,.95);await tc.wait(.1);check(p.text.length<15,'hold repeats delete');check(p.repeatTimer===null&&p.repeatDelay===null,'release stops repeats');")
|
||||
run('length-and-mode',"reset();p.limit=2;p.text='你';p.cursor=1;p.mode='py';p.renderKeys();p.composition='nihao';p.schedule();await ready();await click('你好');check(p.text==='你'&&p.composition==='nihao','overlong candidate not truncated');await click('完成');check(router.getLength()===2,'uncommitted composition not dropped');p.mode='t9';p.composition='64';p.renderKeys();p.english();check(p.mode==='t9'&&p.composition==='64','mode switch preserves uncommitted composition');")
|
||||
run('learning',"reset();await click('编辑');check(!p.learning,'learning defaults off');await click('学习:关');check(p.learning,'learning opt-in');await click('返回键盘');p.composition='64';p.schedule();await ready();await click(p.bar[1].word);check(Object.keys(p.preferences).length>0,'only chosen candidate learned');await click('编辑');await click('清除学习');check(Object.keys(p.preferences).length===0,'learning cleared');await click('学习:开');await click('返回键盘');")
|
||||
run('cancel',"p.text='discard';p.composition='';await click('取消');await tc.wait(.4);check(root.text===''&&router.getLength()===1,'cancel keeps original document');")
|
||||
run('numeric',"await click('数字输入');await tc.wait(.3);p=router.getPage(1);check(p.mode==='num','numeric field auto keyboard');for(var digit of ['1','2','3','0'])await click(digit);await click('完成');await tc.wait(.3);check(root.status.indexOf('1230')>=0,'numeric result returned');")
|
||||
run('password-privacy',"await click('私密输入');await tc.wait(.3);p=router.getPage(1);await click('s');await click('e');check(p.secret&&p.display.indexOf('s')<0&&!p.learning,'secret preview masked');await click('编辑');await click('学习:关');check(!p.learning,'secret cannot enable learning');await launch.launch('com.sydxky.rtos.imefixture');await tc.wait(.9);check(!p.active&&!p.text&&!p.initial,'secret erased on actual app switch');await tc.wait(2);await click('取消');")
|
||||
run('long-text-clear',"await click('开始输入');await tc.wait(.3);p=router.getPage(1);p.text='长😀'.repeat(1000);p.cursor=2000;p.updateDisplay();check(p.count===2000&&p.display.length<60,'long text preview bounded');await click('编辑');await click('清空全文');check(p.count===2000,'clear needs confirmation');await click('确认清空');check(p.count===0,'confirmed clear');await click('返回键盘');")
|
||||
run('lookup-performance',"reset();var times=[];for(var word of ['nihao','zhongguo','shijie','shurufa','beijing','tianqi','shanghai','gongzuo']){var now=Date.now();var candidates=await p.dictionary.lookup(word,false,{});times.push(Date.now()-now);check(candidates.length>0,'lookup '+word)}check(p.dictionary.cacheSize<=4,'bounded decoded shard cache');check(Math.max.apply(null,times)<1000,'emulator lookup under one second');console.log('IME_TIMING '+JSON.stringify(times));")
|
||||
run('finish-save',"reset();p.insert('你好,RTOS!');await click('完成');await tc.wait(.4);check(root.text==='你好,RTOS!'&&router.getLength()===1,'finished text returned to opener');await click('保存草稿');check(root.saved,'explicit local draft save');")
|
||||
finally:
|
||||
if process.poll() is None:process.terminate()
|
||||
process.wait(timeout=10);process.stdin.close()
|
||||
report['passed']=all(x['passed'] for x in report['cases']+report['layouts']);save(args.output/'results.json',report)
|
||||
|
||||
if __name__=='__main__':main()
|
||||
@@ -0,0 +1,71 @@
|
||||
"""Capture all keyboard layouts and check clipping, round bounds and dark edge gaps."""
|
||||
import argparse,datetime,importlib.util,json,math,pathlib,time
|
||||
from PIL import Image
|
||||
import layout
|
||||
|
||||
APP=pathlib.Path(__file__).resolve().parents[1]
|
||||
spec=importlib.util.spec_from_file_location('native',APP/'tests/native.py')
|
||||
native=importlib.util.module_from_spec(spec);spec.loader.exec_module(native);emu=native.emu
|
||||
|
||||
def dark_edges(path,profile):
|
||||
im=Image.open(path).convert('RGB');points=[]
|
||||
if profile.startswith('round'):
|
||||
# 466px screen inside the vendor's 624px hardware skin. Stay 7px inside its edge.
|
||||
im=im.crop((70,79,536,545))
|
||||
for y in range(466):
|
||||
for x in range(466):
|
||||
radius=math.hypot(x-233,y-233)
|
||||
if 224<=radius<=226 and max(im.getpixel((x,y)))<80:points.append([x,y])
|
||||
else:
|
||||
for y in range(4,446):
|
||||
for x in [3,386]:
|
||||
if max(im.getpixel((x,y)))<80:points.append([x,y])
|
||||
for x in range(4,386):
|
||||
for y in [3,446]:
|
||||
if max(im.getpixel((x,y)))<80:points.append([x,y])
|
||||
return len(points)
|
||||
|
||||
def main():
|
||||
parser=argparse.ArgumentParser(description=__doc__);parser.add_argument('--work',type=pathlib.Path,required=True);parser.add_argument('--output',type=pathlib.Path,required=True)
|
||||
parser.add_argument('--profiles',nargs='+',default=emu.PROFILES);args=parser.parse_args();args.output.mkdir(parents=True,exist_ok=True)
|
||||
report={'recorded_at':datetime.datetime.now(datetime.timezone(datetime.timedelta(hours=8))).isoformat(),'artifacts':{},'screens':[]}
|
||||
def capture(profile,name):
|
||||
# Inspector history can associate the new widget tree with the preceding
|
||||
# back buffer on an otherwise idle page. Request two real redraws, restore
|
||||
# the original caption, then retain only the fresh native frame.
|
||||
emu.evaluate("var view=require('@system.router').default.getPages().slice(-1)[0];var captionKey=typeof view.hint==='string'?'hint':'status';var oldCaption=view[captionKey];view[captionKey]=oldCaption+' '")
|
||||
time.sleep(.2)
|
||||
emu.evaluate("view[captionKey]=oldCaption")
|
||||
time.sleep(.4);emu.snapshot(profile+'-'+name,args.output)
|
||||
time.sleep(.3);emu.snapshot(profile+'-'+name,args.output)
|
||||
result=layout.inspect(args.output/(profile+'-'+name+'.tree.json'),profile)
|
||||
result['dark_edge_pixels']=dark_edges(args.output/(profile+'-'+name+'.png'),profile)
|
||||
result['passed']=result['passed'] and result['dark_edge_pixels']==0
|
||||
result.update(profile=profile,screen=name);report['screens'].append(result)
|
||||
native.save(args.output/'visual-results.json',report)
|
||||
print(json.dumps(result,ensure_ascii=False),flush=True)
|
||||
if not result['passed']:raise RuntimeError('Visual regression: '+profile+'-'+name)
|
||||
for profile in args.profiles:
|
||||
process,artifacts=emu.start(profile,args.work,'inputmethod');report['artifacts'][profile]=artifacts
|
||||
try:
|
||||
capture(profile,'home')
|
||||
emu.evaluate("var r=require('@system.router').default,t=require('@system.test').default;var root=r.getPage(0);t.getByClass('document').click()")
|
||||
time.sleep(1);emu.evaluate("var p=r.getPage(1);p.composition='64426';p.schedule()")
|
||||
time.sleep(.5);capture(profile,'t9')
|
||||
emu.evaluate("p.composition='shi';p.mode='py';p.renderKeys();p.schedule()")
|
||||
time.sleep(.5);capture(profile,'pinyin')
|
||||
emu.evaluate("p.expand()");capture(profile,'candidates')
|
||||
emu.evaluate("p.showTools()");capture(profile,'tools')
|
||||
emu.evaluate("p.composition='';p.setMode('14');p.composition='c3754';p.schedule()")
|
||||
time.sleep(.5);capture(profile,'14-key')
|
||||
emu.evaluate("p.expand()");capture(profile,'14-candidates')
|
||||
for mode in ['en','num','sym']:
|
||||
emu.evaluate("p.composition='';p.setMode("+json.dumps(mode)+")")
|
||||
capture(profile,mode)
|
||||
emu.evaluate("p.symbols()");capture(profile,'sym2')
|
||||
finally:
|
||||
if process.poll()is None:process.terminate()
|
||||
process.wait(timeout=10);process.stdin.close()
|
||||
report['passed']=all(screen['passed']for screen in report['screens']);native.save(args.output/'visual-results.json',report)
|
||||
|
||||
if __name__=='__main__':main()
|
||||
@@ -0,0 +1,7 @@
|
||||
# 上游与修改
|
||||
|
||||
- CrabKeyboard:https://github.com/crabPangXie/crabKeyboard
|
||||
- 提交:93d36b5002dee80a3d253b1ec7ec9e29800a104c,MIT,kqakqakqa / crabKun,2026。
|
||||
- 保留原始 41 个 `pinyinDictV5_20260416/*.dat`、许可、README 和读取器。原始文件从 GitHub Git blob API 下载,两项下载经 jsDelivr 按相同提交补齐;全部以 Git blob SHA-1 核对。工作区另保留下载的圆/方页面核心源码,未把 HarmonyOS HML 当作 Glyphix 应用运行。
|
||||
- RTOS 页面、九宫映射、分片转换、Unicode 编辑、分页、生命周期保护和浏览器接入为此次适配。`src/assets/ime-dict/meta.json` 记录每个原始数据文件的 SHA-256 和生成统计。
|
||||
- jieba 0.42.1:https://github.com/fxsjy/jieba/tree/v0.42.1,MIT,Copyright (c) 2013 Sun Junyi。`jieba/dict.txt` 来自本机该版本分发包;仅提取与 CrabKeyboard 候选相交的词频,许可证按固定版本下载。源 SHA-256 在生成清单中。
|
||||
@@ -0,0 +1,22 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2026 kqakqakqa
|
||||
Copyright (c) 2026 crabKun
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,298 @@
|
||||
# CrabKeyboard
|
||||
|
||||
当前版本:**v2.0.0-patch01** · 更新日期:**2026-11-10**
|
||||
|
||||
## 更新日志
|
||||
|
||||
### v2.0.0-patch01 · 2026-11-10
|
||||
|
||||
- 补丁内容:修复键盘输入框偶发性跳跃 bug。
|
||||
|
||||
### v2.0.0 · 2026-11-09
|
||||
|
||||
- 新增长文本特化编辑键盘:方表、圆表各提供独立的加载页与键盘页,支持长文本分行加载与连续编辑。
|
||||
- 修复已知bug,优化应用流畅度。
|
||||
|
||||
### v1.1.6 · 2026-10-30
|
||||
|
||||
- 修复按键上滑输入后文字重复键入的问题:触摸结束后重置输入状态,避免上一次的上滑状态影响后续点击。
|
||||
|
||||
### v1.1.5 · 2026-10-05
|
||||
|
||||
- 新增按键上滑输入:按住按键向上滑动,可直接输入对应的上层字符(大写、符号等)。
|
||||
- 增加剪切板、列表的表冠调用。
|
||||
- 优化候选词选择体验,扩大候选词点击区域。
|
||||
- 修复切换键盘或滚动文本时可能出现的报错。
|
||||
|
||||
### v1.1.0 · 2026-10-01
|
||||
|
||||
- 新增 **flash 轻量词库**,仅保留单字和双字词语;使用轻量词库并移除全量词库后,本次发布包体约 **3.5 MB**,体积减少约 **50%**。
|
||||
- 优化键盘切换触发阈值和拖动阻尼,减少误触。
|
||||
- 增加键入反馈:点击和长按按键时显示字符提示。
|
||||
- 增加光标连续移动时的常亮显示,松手后恢复闪烁。
|
||||
- 修复行间文本重叠问题。
|
||||
- 增强键盘长按小字的字重和亮度,提高可读性。
|
||||
- 修复已知 bug。
|
||||
|
||||
包体数据为本次发布说明中的参考值,实际大小受构建模式、表盘页面及所含资源影响;词库文件大小与完整安装包大小不同。
|
||||
|
||||
## 演示视频
|
||||
|
||||
[观看螃蟹输入法演示](docs/crab-keyboard-demo.mp4)
|
||||
|
||||
## 功能介绍
|
||||
|
||||
CrabKeyboard 是面向 HarmonyOS LiteWearable 的多功能输入组件,提供:
|
||||
|
||||
- 中文拼音输入和候选词选择
|
||||
- 支持连续输入多字拼音;选中候选词后按匹配长度消费已匹配拼音,剩余拼音继续参与候选匹配
|
||||
- 输入偏好学习:记录候选词选择结果并优先展示常用候选;每个拼音最多保存 3 个偏好词,最多保留 100 组拼音偏好
|
||||
- 英文大小写、数字和符号输入
|
||||
- 按键上滑直接输入上层字符,无需切换键盘
|
||||
- 左右滑动切换键盘布局
|
||||
- 删除、光标移动、换行及长按连续操作
|
||||
- 剪切板历史记录和候选词扩展
|
||||
- 支持矩形与圆形表盘布局
|
||||
- 可通过路由参数接入其他业务页面
|
||||
|
||||
## 词库介绍与切换
|
||||
|
||||
两套词库使用相同的 `key*.dat` / `value*.dat` 索引格式,共用 `lookupDictV5.js` 读取器,无需更改查询逻辑。
|
||||
|
||||
| 对比项 | flash 轻量词库(默认) | 全量词库 |
|
||||
| --- | --- | --- |
|
||||
| 目录 | `pinyinDictV5_flash1001` | `pinyinDictV5_20260416` |
|
||||
| 词库文件合计大小 | 1,136,195 字节,约 **1.14 MB** | 3,909,006 字节,约 **3.91 MB** |
|
||||
| 收录范围 | 单字、双字词语 | 单字、双字及三字以上词语 |
|
||||
| 多字文本输入 | 通过单字、双字候选分段组合输入 | 可直接选择词库中收录的较长词语 |
|
||||
| 候选排序 | 保留原词库中剩余候选的顺序 | 原始候选顺序 |
|
||||
| 适合场景 | 包体受限、日常短文本输入 | 更重视长词候选覆盖的场景 |
|
||||
|
||||
flash 由全量词库过滤掉超过两个字的词条并重建索引而来,词库文件体积减少约 **70.93%**。两者均保留拼音前缀回退查询和输入偏好功能;切换词库不影响英文、数字、符号及剪切板功能。表中 MB 按 1,000,000 字节计算。
|
||||
|
||||
### 如何切换词库
|
||||
|
||||
在 `keyboard_rect/keyboard.js` 和 `keyboard_circle/keyboard.js` 顶部,二选一取消注释:
|
||||
|
||||
```javascript
|
||||
// 轻量
|
||||
const dictPath='internal://app/rawfile/pinyinDictV5_flash1001';
|
||||
// 全量
|
||||
// const dictPath='internal://app/rawfile/pinyinDictV5_20260416';
|
||||
```
|
||||
|
||||
然后确保 `entry/src/main/resources/rawfile/` 下只保留要用的那一个词库目录,重新构建即可。
|
||||
|
||||
本仓库同时保留了两套词库,默认使用 flash。两个目录都保留时不会减小包体,需要得到约 3.5 MB 的包体时,请先移出未使用的词库目录(建议存放到项目资源目录之外)。
|
||||
|
||||
## 接入步骤
|
||||
|
||||
以下路径以 `entry/src/main` 为例。
|
||||
|
||||
### 1. 复制字典文件
|
||||
|
||||
默认使用 flash 轻量词库,将完整目录复制到自己的 `rawfile`:
|
||||
|
||||
```text
|
||||
entry/src/main/resources/rawfile/pinyinDictV5_flash1001/
|
||||
```
|
||||
|
||||
目录名和其中的 `key*.dat`、`value*.dat` 文件必须保持不变。键盘默认读取:
|
||||
|
||||
```text
|
||||
internal://app/rawfile/pinyinDictV5_flash1001
|
||||
```
|
||||
|
||||
如果需要全量词库,请按上方“如何切换词库”操作;修改目录名时,需要同步修改两种键盘页面中的 `dictPath`。
|
||||
|
||||
### 2. 复制键盘页面
|
||||
|
||||
将需要的页面目录复制到自己的 `pages` 目录:
|
||||
|
||||
```text
|
||||
entry/src/main/js/default/pages/keyboard_rect/
|
||||
entry/src/main/js/default/pages/keyboard_circle/
|
||||
```
|
||||
|
||||
每个目录包含:
|
||||
|
||||
```text
|
||||
keyboard.hml
|
||||
keyboard.css
|
||||
keyboard.js
|
||||
```
|
||||
|
||||
只需要一种表盘时,可以只复制对应目录。
|
||||
|
||||
### 3. 复制公共素材
|
||||
|
||||
将整个目录复制到自己项目的 `common` 目录:
|
||||
|
||||
```text
|
||||
entry/src/main/js/default/common/keyboard/
|
||||
```
|
||||
|
||||
必须保留以下结构:
|
||||
|
||||
```text
|
||||
common/keyboard/
|
||||
├── circle/
|
||||
├── common/
|
||||
├── rect/
|
||||
└── lookupDictV5.js
|
||||
```
|
||||
|
||||
不要修改目录和文件名。页面使用 `/common/keyboard/...` 的资源路径,`lookupDictV5.js` 也必须一起复制。
|
||||
|
||||
### 4. 注册页面
|
||||
|
||||
在 `entry/src/main/config.json` 的 `module.js[0].pages` 中加入实际使用的页面:
|
||||
|
||||
```json
|
||||
"pages": [
|
||||
"pages/index/index",
|
||||
"pages/keyboard_rect/keyboard",
|
||||
"pages/keyboard_circle/keyboard"
|
||||
]
|
||||
```
|
||||
|
||||
如果只复制了一种键盘,只注册对应的一项。
|
||||
|
||||
## 从业务页面打开键盘
|
||||
|
||||
业务页面需要准备一个用于接收结果的 `data` 字段,并通过路由参数打开键盘:
|
||||
|
||||
```javascript
|
||||
import Router from '@system.router';
|
||||
|
||||
export default {
|
||||
data: {
|
||||
content: ''
|
||||
},
|
||||
openKeyboard() {
|
||||
Router.replace({
|
||||
uri: '/pages/keyboard_rect/keyboard',
|
||||
params: {
|
||||
targetPage: '/pages/form/form',
|
||||
backPage: '/pages/form/form',
|
||||
targetKey: 'content',
|
||||
prompt: '请输入内容',
|
||||
maxLen: 0,
|
||||
forbidden: '',
|
||||
allowNewline: true,
|
||||
keyType: 0
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
`targetKey` 必须与目标页面 `data` 中的字段名一致。输入完成后,键盘通过路由参数把结果写回该字段。
|
||||
|
||||
### 路由参数
|
||||
|
||||
| 参数 | 必填 | 说明 |
|
||||
| --- | --- | --- |
|
||||
| `targetPage` | 是 | 输入完成后返回的页面路径。 |
|
||||
| `targetKey` | 是 | 目标页面接收输入结果的字段名。 |
|
||||
| `backPage` | 否 | 取消编辑时返回的页面,未设置时使用 `targetPage`。 |
|
||||
| `prompt` | 否 | 空输入时的提示文字。 |
|
||||
| `maxLen` | 否 | 最大输入长度,`0` 表示不限制;当前按字节数统计。 |
|
||||
| `forbidden` | 否 | 禁止输入的字符集合,不是正则表达式。 |
|
||||
| `allowNewline` | 否 | 是否允许换行。 |
|
||||
| `keyType` | 否 | 初始键盘:`0` 中文、`1` 小写、`2` 大写、`3` 符号。 |
|
||||
|
||||
## 其他页面接入剪切板
|
||||
|
||||
### 数据约定
|
||||
|
||||
剪切板使用应用私有文件:
|
||||
|
||||
```text
|
||||
internal://app/shear.json
|
||||
```
|
||||
|
||||
文件内容为字符串数组,最新内容在第 0 项,最多保存 15 项:
|
||||
|
||||
```json
|
||||
["最新内容", "上一条内容"]
|
||||
```
|
||||
|
||||
这不是系统剪切板,只能在同一个应用内共享。
|
||||
|
||||
### 读取和保存
|
||||
|
||||
在需要使用剪切板的页面中加入 `shearList`,页面初始化时读取,销毁时保存:
|
||||
|
||||
```javascript
|
||||
import File from '@system.file';
|
||||
|
||||
onInit() {
|
||||
File.readText({
|
||||
uri: 'internal://app/shear.json',
|
||||
success: (data) => {
|
||||
if (data.text) {
|
||||
this.shearList = JSON.parse(data.text);
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
onDestroy() {
|
||||
File.writeText({
|
||||
uri: 'internal://app/shear.json',
|
||||
text: JSON.stringify(this.shearList)
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
### 参考设备参数页面接入
|
||||
|
||||
设备参数列表使用 `{name, value}`,在 HML 中给每条参数增加长按事件:
|
||||
|
||||
```hml
|
||||
<list-item class="item" for="{{list}}" on:longpress="copyInfo($idx)">
|
||||
<text>{{$item.name}}</text>
|
||||
<text>{{$item.value}}</text>
|
||||
</list-item>
|
||||
```
|
||||
|
||||
在页面 JS 中将对应值写入剪切板:
|
||||
|
||||
```javascript
|
||||
copyInfo(idx) {
|
||||
this.shearList.unshift(String(this.list[idx].value));
|
||||
if (this.shearList.length > 15) {
|
||||
this.shearList.length = 15;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
这样长按设备参数卡片后,参数值会进入 `shear.json`;再次打开 CrabKeyboard 的剪切板弹窗即可选择并插入当前输入位置。
|
||||
|
||||
### 普通页面写入文本
|
||||
|
||||
文本编辑器、脚本编辑器、文件管理器等页面只需要把要复制的文本传入相同逻辑:
|
||||
|
||||
```javascript
|
||||
addToClipboard(text) {
|
||||
this.shearList.unshift(String(text));
|
||||
if (this.shearList.length > 15) {
|
||||
this.shearList.length = 15;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
页面退出前保存 `shearList`。如果需要复制后立即持久化,可以在 `addToClipboard` 末尾直接调用 `File.writeText`。
|
||||
|
||||
## 检查清单
|
||||
|
||||
- 字典目录已复制到 `resources/rawfile`。
|
||||
- `pages/keyboard_rect` 或 `pages/keyboard_circle` 已复制。
|
||||
- `common/keyboard` 已完整复制。
|
||||
- 键盘页面已注册到 `config.json`。
|
||||
- `targetPage` 和 `targetKey` 已正确配置。
|
||||
- 剪切板读写统一使用 `internal://app/shear.json`。
|
||||
|
||||
## License
|
||||
|
||||
MIT License,详见 [LICENSE](LICENSE)。
|
||||
@@ -0,0 +1,106 @@
|
||||
import File from '@system.file';
|
||||
|
||||
const _this = {
|
||||
lookupDict: lookupDict,
|
||||
};
|
||||
|
||||
const SEP_ENTRY = "\u001e";
|
||||
const SEP_OFFLEN = "\u001f";
|
||||
|
||||
function from94(str) {
|
||||
const CHAR_START = 33;
|
||||
const BASE = 94;
|
||||
let result = 0;
|
||||
for (let i = 0; i < str.length; i++) {
|
||||
result = result * BASE + (str.charCodeAt(i) - CHAR_START);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param baseDir 字典目录
|
||||
* @param key 查找的字符串
|
||||
* @param then 回调 (match, key, result)
|
||||
*/
|
||||
function lookupDict(baseDir, key, then) {
|
||||
const searchKey = key.toLowerCase();
|
||||
let depth = 0;
|
||||
|
||||
// 记录最长前缀匹配
|
||||
let bestMatch = { key: "", off: -1, len: -1, depth: -1 };
|
||||
|
||||
function step(readOff, readLen) {
|
||||
File.readText({
|
||||
uri: baseDir + "/key" + depth + ".dat",
|
||||
position: readOff,
|
||||
length: readLen,
|
||||
|
||||
fail: (data, code) => {
|
||||
if (bestMatch.off !== -1) {
|
||||
readValue(bestMatch.off, bestMatch.len, bestMatch.depth, function (v) {
|
||||
then(bestMatch.key, v);
|
||||
});
|
||||
} else {
|
||||
then("", null);
|
||||
}
|
||||
},
|
||||
|
||||
success: d => {
|
||||
const text = d.text;
|
||||
const entries = text.split(SEP_ENTRY);
|
||||
const targetChar = searchKey[depth];
|
||||
|
||||
for (let i = 0; i < entries.length; i++) {
|
||||
const entry = entries[i];
|
||||
if (!entry) continue;
|
||||
|
||||
const char = entry[0];
|
||||
const parts = entry.substring(1).split(SEP_OFFLEN);
|
||||
const vOff = from94(parts[0]);
|
||||
const vLen = from94(parts[1]);
|
||||
|
||||
// 处理当前节点的叶子数据 (前缀匹配)
|
||||
if (char === "_") {
|
||||
bestMatch.key = searchKey.substring(0, depth);
|
||||
bestMatch.off = vOff;
|
||||
bestMatch.len = vLen;
|
||||
bestMatch.depth = depth;
|
||||
}
|
||||
|
||||
// 处理通往下一层的路径
|
||||
if (char === targetChar) {
|
||||
if (depth === searchKey.length) {
|
||||
// 精确匹配结束
|
||||
break;
|
||||
}
|
||||
depth++;
|
||||
return setTimeout(() => step(vOff, vLen), 0);
|
||||
}
|
||||
}
|
||||
|
||||
// 没有找到下一层,返回最长匹配
|
||||
if (bestMatch.off !== -1) {
|
||||
readValue(bestMatch.off, bestMatch.len, bestMatch.depth, function (v) {
|
||||
then(bestMatch.key, v);
|
||||
});
|
||||
} else {
|
||||
then("", null);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function readValue(vPos, vLen, vDepth, callback) {
|
||||
File.readText({
|
||||
uri: baseDir + "/value" + vDepth + ".dat",
|
||||
position: vPos,
|
||||
length: vLen,
|
||||
fail: function () { callback(null); },
|
||||
success: function (data) { callback(data.text); }
|
||||
});
|
||||
}
|
||||
|
||||
step(0, 1024);
|
||||
}
|
||||
|
||||
export default _this;
|
||||
@@ -0,0 +1 @@
|
||||
a!"db"d"yc$^"{d&Z#3e(l"rf*_#(g,f#+h.p#*j0y#2k3,#&l51#:m7J#3n9\#7o;r"]p=P#0q?_#0rAn#-sCz#3tF.#3wH@#+xJJ#2yL[#3zNm#3
|
||||
@@ -0,0 +1 @@
|
||||
_DR"ba!AbA"!c"Add#&"He$M"$f%Ppg&A|h'>pi(/"Oj)]"0k*lvl+c"Zm->"6n.S"Zo0."Hp1Upq2F"6r3[@s3z"Ht5C|w6@Xx6wdy7\"$z8_|_+/"ba9\"Wb;4"Nc<a"Bd>$"Ne?Q"Df@t"0gB%"NhCR"HiDy"bjF\"ckH@"]lI|"dmKa"OnM1"UoNe"epPK"%qQO"3rRa"AsT#"\tU^"UuW4"cwXv"VxZM"dy\2"dz]u"d_:D"ba_Z"Db`}"VcbT"Vdd+"Vee`"Vfg7"Hgh^"Hhj'"}il%"djmh"Vko?"Alp_"Umr5"Onsc"3otu/pu%"%qv)"OrwW"Asxw"VtzN"du|3"`w}r"Nx"!A"]y""}"dz"$b"V_.S"ba"&9"tb"(."\c")i"]d"+G"]e"-%"kf".o"Ug"0E"Vh"1z"]i"3X"sj"5L"]k"7*"Hl"8Q"]m":/"]n";k"do"=P>p"=m"Oq"?="\r"@x"Os"BH"^t"D'"Ou"EU"uw"GK"]x"I)"]y"Je"]z"LC"]_5="ba"N!(b"N("Vc"O]ud"PS",e"Q^`f"R?Dg"Rb|h"S_ni"TN(j"TUgk"U=(l"UD"Am"Vdnn"WS"Hp"XzDq"Y?nr"Z."cs"[p"rt"]c|w"^``x"_A`y"`"|z"`}",_Bo"ba"b*"eb"cn"Oc"e>"Od"fl"He"h5~f"i4"Hg"j["Hh"l$"Aj"mD"Vk"ny":l"p4"]m"qp"An"s2no"t!"3p"u3nq"v""3r"w4us"x*"]t"yf"%u"zj"dw"|O"Ox"}}"Vy#!T"Vz##+"\_6~"ba#$f"Db#&+"Oc#'Y"Od#))"]e#*e"mf#,S"Ag#-s"]h#/Q"Vj#1("ck#2j",l#3u"dm#5Z"Vn#71"Ho#8X7p#8n"3q#:"":r#;;",s#<F"\t#>#"]u#?_"vw#AV"Ox#C&"\y#Da"]z#F?"\_&("ba#Gz"`b#I["cc#K?"dd#M$"]e#N`"mf#PN"Og#Q|"Vh#SS"Vj#U*"Vk#V_"Hl#X("dm#Yk"On#[;"Vo#\p7p#](|q#^%"Hr#_L":s#`e"dt#bJ"du#d/"vw#f&"]x#gb"]y#i@"dz#k%"V_1w"ba#lZRb#m-"dc#np"Vd#pG"\e#r$"%f#s("Hg#tO"dh#v4"]i#wp"vj#yg"ck#{K"Vl#}""]m#~^"]n$"<"Oo$#j(p$#q"Aq$%3"Or$&a"Os$(1"\t$)l"]u$+J"gw$-2"]x$.n"cy$0R"dz$27"d_=h"ba$3z"`b$5[":c$6t":d$8/"Ve$9d"df$;I"Og$<w"%h$={|j$>x"Ok$@H"Ol$Av"dm$C["Hn$E$"$o$F'0p$F6`q$Fu|r$Grgs$HZ"Nt$J)"Ou$KW"vw$MNux$ND"Oy$Or"Gz$Q:"O_!"ba$Rh"ub$T^"]c$V<"]d$Wx"\e$YU"\f$[2"Og$\`"]h$^>"di$`#"|j$a~"Vk$cU"Vl$e,"]m$fh"dn$hM"Vo$j$>p$jA"3q$kS"Vr$m*"Hs$nQ"ct$p5"Ou$qc"nv$sR"kw$u>"]x$vz"]y$xX"]z$z6"d_A."ba${y"ub$}o"Ac%!1"Od%"_"]e%$="4f%%P":g%&i"\h%(F"]i%*$"fj%+i"Ok%-9":l%.R"dm%07"On%1e":o%2~"lp%4k`q%5L"Or%6z"As%8<"dt%:!"Vu%;V"kw%=B"Ox%>p"Vy%@G"\z%B$"d_3Z"ba%Cg"mb%EU"Hc%F|":d%H7"He%I^nf%JM|g%KJ"Oh%Lx"Hi%NA"mj%P/"Vk%Qd",l%Ro":m%T*"Hn%UQ"Ao%Vq6p%W(nq%Wu"3r%Y)":s%ZB"Vt%[w`u%\X"Pv%^)"Hw%_P":x%`i"3y%a{"Vz%cR"O_F5La%e"/d%e0=e%eL(f%eS(g%eZ/h%eh(j%eo=k%f-(l%f4Dm%fWDn%fz/p%g*/q%g8(r%g?6s%gT(t%g[/u%gi"Vw%i@6x%iU6y%ij|z%jgR_?K"ba%k:"_b%lx"Ac%n:"%d%o>"Ae%p^pf%qO":g%rh"3h%sz"3i%u."ej%vr"Ak%x4"%l%y8"Om%zf"3n%{xKo%|D"dp%~)"Oq&!W|r&"Tgs&#<"Vt&$q"Vu&&H"dw&(-"%x&)1"Hy&*X"Az&+x"3_8a"ba&-,Db&-O"Oc&.}"Od&0M"Ae&1m`f&2N":g&3g"9h&5!"Oi&6O"vj&8F"]k&:$"+l&;."@m&<M"3n&=_":o&>x(p&?!nq&?n"]r&AL"%s&BP"]t&D."Au&EN"fw&G5",x&H@"Oy&In"Gz&K6"\_06"ba&LqFb&M8"3c&NJ"Ad&Oj"He&Q3"Wf&Ri`g&SJ"Gh&Tp"Ai&V2"Uj&Wf"Ak&Y(ul&Y|":m&[7"9n&\ORo&]"7p&]8Dq&]["%r&^_",s&_j"Ot&a:gu&b""sw&ct"$x&dw"Hy&f@"Vz&gu"V_"b"ba&iL"gb&k4"Vc&li"\d&nF"de&p+"df&qn"]g&sL"Vh&u#"|i&v~"]j&x\"ck&z@"Ol&{n"dm&}S"cn'!7"do'"z6p'#1"Oq'$_"Vr'&6"]s''r"dt')W"]u'+5"uw'-+"]x'.g"]y'0E"cz'2)"d_)L"ba'3l"nb'5["Ac'6{"Hd'8D":e'9]"df';B":g'<["Nh'>*"Hi'?Q"kj'A="dk'C""Al'DB"dm'F'"Gn'GM",o'HX0p'Hg",q'Ir",r'J}":s'L8"\t'Ms"Vu'OJ"uw'Q@"Ox'Rn"Oy'T>"]z'Uz"]_,p"ba'WX"_b'Y8"Vc'Zm"Vd'\D"]e'^""Cf'_D"Hg'`k"]h'bI"\j'd&"dk'ei"Al'g+"dm'hn"Nn'j="Ho'kd"cp'mH`q'n)"Hr'oP"Hs'pw"^t'rV"Nu't%"dw'uh"dx'wM"]y'y+"]z'zg"]_<'"ba'|E|b'}B"dc(!'"Hd("N"de($3",f(%>"]g(&z"dh((_"di(*D"wj(,<"dk(.!"3l(/3"Vm(0h"Vn(2?"]o(3{6p(42",q(5="dr(7""Hs(8I"ct(:-"Vu(;b"fw(=I"]x(?'"dy(@j"dz(BO"c_'i"ba(D3"nb(F""cc(Gd"]d(IB"de(K'"df(Lj"Og(N:"ch(O|"]i(QZ"ej(S@"\k(T{"Hl(VD"dm(X)"]n(Ye":o(Z~Sp([R"Vq(])"]r(^e"]s(`C"et(b)"Vu(c^"fw(eE"cx(g)"cy(hk"\z(jH"c_$E"ba(l,"gb(mr"]c(oP"Vd(q'"ce(ri"cf(tM"Og(u{"\h(wX"vi(yO"dj({4"ck(|v"Hl(~?"\m)!z"On)#J"Oo)$x>p)%7"3q)&I"Or)'w"Vs))N"]t)+,"du),o"uw).e"]x)0C"\y)1~"\z)3["\
|
||||
@@ -0,0 +1 @@
|
||||
_$&{-_"&P-i!(_(at-g((u/(g6(_j8*_(>j-_%xL-n=(_#pV-_%BB-yD&aI&iN'iT(_C;-u[(_'0p-gb(ii(up(qw&a|&_$w0*o"#(n"*(_=,-a"1&i"6&g";(_%)U-_%Uz-_'_"-g"B(n"I&_#J6-_(>v-g"N&u"S&n"X&_"vS-_'E`-_&vJ*n"]&n"b&_'El-j"g&_"hU-g"l(_$KV-u"s(n"z&_(?$*i#!(b#(&g#-'_%xX*_%a"-_2y*_%BN-_$8b*_'Ex*g#3'g#9(i#@'_(b.-_&3&-i#F(_)-K-g#M(u#T(h#['i#a(n#h(h#o'z#u'_'0|*l#{'c$#'y$)'z$/'g$5'u$;(i$B'_'|?*i$H(_Rk*u$O(u$V'i$\(h$c'_$')-g$i(n$p'h$v'a$|'g%$(_'_.-_$Uv-_(b:-_'|H*h%+'h%1'u%7'i%='i%C'_(b"-_)-W*i%I(_%BZ-_$p$-e%P'_'F/-o%V(_'|Q-_$~v*o%]'g%c(i%j(_#w<-n%q'o%w(i%~(_%KY-_%kk*a&''g&-(a&4(_&en-z&;'_a@*u&A'_#\;*u&G'j&M'p&S'i&Y(y&`'_'|{-o&f(i&m(_#pb*o&t'_"Op*g&z(_#d`*_'F;*_(ba*i'#(o'*'a'0'i'6'_'FM*_&32*_8F*a'<.r'I(i'P.i']'i'c(a'j'h'p'i'v(u'}(i(&(_(?B*j(-'n(3(_&3;*_'FD*_"N.*_&RB*n(:'g(@(a(G'n(M'u(S'_`2*u(Y(_&C`*s(`'_&w4*g(f'_&3D*g(l(_%xj*_0x*g(s'n(y'o)!'i)'(i).'_%!**h)4'n):'g)@(o)G'_$!K*c)M'o)S(o)Z(i)a(n)h.z)u'a){'g*#(z**'i*0(_$Pi*_$Pi*_%!3*g*7(s*>'n*D'a*J'_'})-g*P(u*W(i*^(_&3M*h*e'_%V(-u*k(a*r'_(?K*n*x(n+!'u+''h+-'s+3'_%Ke*_(bj*_%xa*_'1'*_2^*e+9'n+?(e+F'_"Oy*_#hi-u+L(i+S'n+Y'_(bj*_'FV-u+_(_&3V*_'|r*a+f'h+l'n+r'_H_*u+x'_'10*_%V4*g+~'_#wH*_'_L*_&w(-_&vt*a,&'g,,(g,3(_"+`*u,:'_$8k*_&ez*_&3_-_ul*z,@'g,F(g,M(n,T(n,[(_$Dl*i,b(_(bX*_&%z*g,i(u,p'a,v'h,|'i-$(i-+(_"zo*a-2'_&v}*_"fZ*_&Ci*_$Du*s-8'a->'o-D(g-K(g-R(_#.`*_#.`*i-Y(o-`(i-g(n-n(_(bj*_#Gl*_&vk*_$bu*_#.T-_%Bf*_%!!*n-u(e-|(_(?6-_'|]*i.%(l.,'_(?-*e.2'h.8'g.>(_'}5-d.E'n.K(s.R'n.X(a._'i.e(n.l'g.r(_'$c*n.y'_#l6*_(?T'n/!'g/'(u/.'h/4'g/:(n/A'n/G'd/M'_%kt*_'Fb*_$b~*y/S'_Xz*_#t*l/Y'g/_'o/e'_#}2*_'19*_%fG*o/k's/q'i/w'u/}(u0&(_$HM*_#.u'e0-(e04'e0:'_)-r*s0@'g0F(r0M(_#wQ*a0T'_)-`*a0Z(_$D~*f0a'a0g'n0m(f0t'y0z'o1"(n1)'n1/'_#B"*u15's1;'h1A'_$'5*_#5A*_#).-n1G(_"8%*_#.i-i1N'_%k}*_)-i*i1T(u1[(n1b'g1h(_%10*_$[g*_(bs*j1o'i1u'y1{'i2#(i2*(x21'q27'o2=(h2D'o2J(a2Q't2W'a2]'i2c'i2i(c2p'h2v'_&3t*_]d*i2|'_$E)*n3$(_"q2*u3+'_%Kw*_#RD*u31'g37(_#><*o3>(_'<(*n3E(e3L(_"Jt*n3S'u3Y(i3`(h3g'i3m'_&&%*_"le-n3s'_Dw-_&&.*_"lq*_"+i*_&Cr*p3y'n4!(u4('s4.'g44'g4:'h4@'n4F'u4L(g4S(g4Z(_"QM*g4a'_&&7-_"ta*i4g'g4m(o4t(_(c'*n4{(_%x|*_&3k*_%)a*g5$(_(b|*n5+'_'_U*g51(n58(g5?(g5F(_'Fk*_'}S*g5M(g5T'g5Z'_"]<*y5`'_%xs*n5f'g5l(g5s(n5z'n6"'_%Kn*e6('u6.'k64'i6:(_"S9*_'}A*_"DZ*_$V$*_"X/*y6A'g6G'_#U~*o6M'_#>E*_$c)*n6S'_(?Z*h6Y'g6_(h6f'h6l'i6r'g6x(m7!'_'}J*n7'(_$[p*o7.(a75'n7;'g7A(_"ZX*n7H(_)-{*u7O(g7V'i7\'a7b'e7h(i7o'h7u'g7{(i8$'_~)-h8*'_%1$-i80(a87(a8>'a8D'_'|f-_&eb-i8J'o8P(i8W(_'_C*_'_:*a8^'y8d'_"Yb*_(bO*_"H|-r8j'_%!<*i8p'g8v'o8|(_"~/-n9%(i9,(n93'_"k>*n99(e9@'i9F(g9M'z9S'_$E2*n9Y'_$p0*g9_(g9f(u9m(_'Ft*_%a.*h9t'_'F}-_'F}-_(c9*_'1B*u9z'i:"(w:)'y:/'_(c0*y:5'd:;'e:A(i:H'_"v_-h:N'_&3}*n:T-u:`'u:f'_#^p*d:l'o:r'a:x'g:~'y;&'q;,'i;2'y;8'_$n*j;>'w;D'g;J(_).&*h;Q'u;W'n;]'s;c'n;i(n;p'_%!E*_#B+*_"x=-r;v(g;}(_%Bo-_%Bo-_N"*_(?c*g<&(j<-'_":d*_)./*g<3(_%l(*h<:'g<@(_"@N*g<G'i<M'x<S'h<Y'_(?u-r<_'u<e'z<k'n<q(i<x._(?l*_"xI-u=''_#Ml*f=-'i=3'n=9'a=?'a=E'g=K'z=Q'_).8*r=W'_&RK*_"2l-_'G+-i=](n=d(u=k'g=q(m=x's=~'n>&'_(@#*a>,'_"W**n>2'_(@,*_GN*h>8'm>>'n>D(i>K(n>R'_).A*s>X'j>^'n>d(_).J-a>k(a>r'_(@5*i>x(i?!(g?((n?/'_).V*y?5'z?;'g?A(_&4(*_$//*o?H(g?O'l?U'_'G[*o?['e?a(i?h'_(cK*_)/@*j?n'o?t(a?{'u@#'a@)'n@/(a@6'i@<'b@B'_(cB*d@H'e@N(c@U'_&4F*q@['h@a'i@g'i@m(u@t(a@{'nA#(aA*'_)/I*eA0(_&4O*_(@Y*_'}e*nA7'iA=(_#Y,*nAD'aAJ(_(@P*_%V=*_&4=*_$w9*uAQ'gAW(yA^'_&wF*aAd'hAj'_#V)*gAp'uAv(_"8@*_(@>*oA}'_)/7*nB%'gB+'_%y3*aB1(xB8'nB>'_&C{*aBD'uBJ-_%a7*_(@G*_HM*_#l?'iBV(eB](_#aG*nBd'_%lI*lBj'hBp'hBv'nB|'_'Gm-_'_j-_%a@*nC$'_)/m*aC*(_#V2*aC1'nC7'aC='_)/v*xCC'_)0!*uCI._)Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_%x3-_&?G-_#>O-_%x?*_&n%-e!(o((_C=-_%VZ-_&V6-_&VB-_&VN-_$.t-i/'o5(_"Y&-_#7#-n<(nC&_%x?*_%<1-gH'uN&oS'gY'g_(gf(im&_'+|*_#Z;-gr(_"_4-uy(x""&r"'&_'iJ*_kw-_&?S-_','-_$a:-a",&_%!]-_$DH-i"1(u"8&i"=(h"D&u"I(h"P&c"U&_'h{-a"Z&_'i)-_#7/-a"_&_'i5-a"d&_"AH-g"i(u"p(n"w'_$DT*a"}&a#$&a#)'n#/'a#5(_'iA*n#<'_%g?-n#B'_$=4-_'HG-g#H'_'+p-_&mw-o#N(_%I7-_$6/-h#U'a#['n#a'i#g'a#m'_&n:-a#s'_$t4*_%!u*u#y(_%<=*_%/@-n$"'n$('n$.'_#0q-i$4'_"n,-_&nF-u$:(u$A(_#ZG-n$H(i$O(_#e?-_"r,-_%gK-i$V(_&,"*r$]'_#Ej*n$c'g$i'e$o(_#yu-i$v(d$}'_%Vf*m%%'g%+(n%2'_$t=-a%8'u%>'g%D'_',3*_x7*e%J'_&,+*_&nR*_%<O-_%xH*g%P(h%W'n%](_"3m*h%d'_#tN-_&n1*h%j'g%p(n%w(_"99*_$'8-_%gW-o%~'_$=@-n&&(_$Wh-g&-(_`d-u&4'h&:'n&@'_$aF*n&F(_%/4-a&M(g&T(_""j-o&[(a&b'g&h(a&o's&u'i&{(_&?_-_'HS*i'$(h'+'_$!.*_"O)*_"J:*_%<F*_%<F*_$Du*n'1(n'8(i'?(_$h:-_&n[-n'F'h'L'i'R(_$t4*_"6i*_"Wd*_'H\-_$/"-_#jh-_"]A*_"7}-_"D>-_#4b-o'Y'n'_'a'e'_$D]-i'k'_#R9*h'q'_"+8*n'w'_%!~-_[^*_#')*g'}(g(&(_&?}*a(-'i(3(_"s&*_Qq*g(:(u(A(i(H(i(O(_4Y*_bA*u(V'u(\'a(b'_&bc*_#>[*_'iS-n(h(n(o(h(v'_$=L*_#aF-n(|'_#z#-u)$(n)+(_"<8*e)2'o)8'_&?k*g)>'g)D(i)K(h)R'a)X'_&?t*u)^(_":/-_$tI-g)e'_"JC*i)k'_7i-u)q'_',<-_%">-i)w'u)}'_"JL*u*%'_&,=*n*+(u*2'n*8(n*?'_'i_-h*E'e*K'a*Q(_'H}*y*X'e*^'_'ik*_',H*_$N34_&@1-g*d(_%gc*_#jt*u*k'n*q'g*w(i*~'_&ng*o+&(i+-(s+4's+:'u+@'_G^*_$hF-_&@(*_'I(*u+F'a+L'_$hR*_#>d*_"p:*_&Vf*g+R(_#z/*_'Hh*_%",*_%xQ*_%<[*r+Y'_nq*i+_(g+f'_$tU*_$tU*_YG*w+l'i+r'a+x'u+~(_&@=-o,''s,-'n,3'g,9(i,@(_&,4*i,G(u,N'a,T'_&np*e,Z'_%IC*_&,=*n,`(g,g(_"1r*_"&:*_$'D*_M_*a,n'i,t(_%"5*a,{'i-#(_$h[*_im-u-*'_%!i-_$Di-i-0'n-6'a-<'_&VZ-_$N'-i-B(i-I(e-P'e-V(_<z*_%xZ-_"2w*_'it*g-]'_$!7-n-c(_"_@-_m{-h-j'g-p(_'I:-_$'M*_"}8-e-w'o-}(_$t^-a.&'i.,(u.3'u.9'_#$a-a.?'e.E(b.L'g.R'e.X'_?Y-i.^'n.d'n.j(u.q'u.w'u.}'a/%'i/+(i/2'e/8'_$'V*a/>'a/D'r/J'h/P'_#;C*g/V'_&ny-_%gl*_$=U*i/\'_$tj*i/b(_'I1*r/i'o/o'i/u'a/{'e0#'e0)(h00'_#!m*_$/.-a06(a0='a0C's0I'g0O'n0U(n0\(t0c'h0i'e0o'_$hd-_'i}*a0u'_',f*u0{(i1$(g1+(o12'a18(i1?(u1F'_',Q*_$NF-g1L(h1S'i1Y'_$NR*_'j(-o1_(_',Z-_&o'-_'j4*t1f'i1l(u1s'_'j=*_#tZ-g1y'i2!'j2''_'jg*g2-'i23'_"ws*n29(a2@(o2G(_"()*n2N(n2U(a2\'u2b'_$'_-e2h(i2o'a2u'o2{'_#7;-_%h,*o3#(_$aO*n3*(_'jp*g31(_"N'*g38(_&W)*c3?'_"1-*i3E'n3K(a3R'w3X'_%IL*n3^'g3d'x3j'_"wj*u3p'g3v'_9I*n3|'o4$'_&o3*_&@^*z4*'i40(a47'u4='_)'*g4C(_$/:*n4J'z4P'n4V'i4\'_'k$*l4b'_'k-*g4h._'k6*_'IF*y4u'a4{'_#>m-_#;L*_',x*i5#(_"Gv*_'k?*_'jy*_%h5*_76*n5*(_$aX*n51'g57(_',o*_&@g*_%g~-_&@I*u5>(i5E'_"zm*i5K'm5Q'g5W(_"Y2-i5^'e5d'i5j'o5p(g5w'o5}(u6&'_'jF-a6,'i62(e69(_eG-i6@'h6F'_&Vo-_$Wt-g6L(_&@R-n6S(_"O2-_'kH*n6Z(a6a(o6h(i6o'e6u(r6|'n7$(_@.*_"*T-i7+(n72'f78's7>'l7D'_"u~*a7J(_'kQ*z7Q'_#!v-_'Ia*_'IO*_'kZ*g7W'j7]'g7c'z7i'i7o'n7u'a7{'_'kc*u8#(d8*'_'kl*n80(_%hJ-e87'l8='a8C'h8I'n8O(m8V'i8\(_"r8*_%hV*_'IX*_$X"*_%h>-h8c'_%gu*o8i(_&V{-g8p'_'jR*i8v'u8|'g9$'a9*'i90(_'j[-i97'_&@I*_#0}-h9='n9C'i9I'_%Vo-_$ts-_#P2*_$N[-o9O(_"}D-u9V(k9]'_'Hq-_"bI-e9c'_'ku-_"!q*o9i'i9o(_$Ng-_#-z-_g'-_%"J-i9v'_%"V-n9|(_#Ir-_*^-_#BU-_%/L*n:%'a:+(g:2(u:9(o:@(_&@p-_'l#-_#'2-_&,^-_&W2-s:G'g:M'g:S'n:Y(a:`'_'l/-_'l;-n:f'a:l'i:r'i:x'_&,R-i:~'i;&'g;,(n;3'_#'>-g;9(_#>y-_#Es-_%<d-i;@'a;F'o;L(n;S'n;Y'_nz-_#pW-n;_'n;e(i;l'n;r(_#1+-_'lG-g;y(_&,F-_$Ns-_$u!-u<"(n<)'u</(_#tf-_"cQ-_"1{-a<6'_"2)-_%xf-_&o<-_'lS-_&oH-u<<(_x"-n<C'n<I(n<P'i<V'g<\(h<c'_%V{-_#U*-_%/U-_&ol-_$hp-_"Lz-_%"b-_u|-_'-#-_'l_-_"gx-i<i'n<o'_&A*-e<u(g<|(n=%'u=+'_tZ-n=1(h=8'_"H!-_$D~-a=>(_%xr-e=E(a=L'u=R(n=Y(i=`'_#BI-_'lk-_'lw-g=f(g=m(d=t'_'m%-a=z'n>"'a>('n>.(n>5'a>;'_au-g>A(_w5-_'Ij-n>H'_#I~-_&o`-g>N'_'m1*h>T'_$E,-_&oT-i>Z(_&W>-_%<p-n>a(_&@|-_#.(-_%x~-_'mLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
_$JA-_#yP-_mZ-_"Pk-_$1X-g!(_u(-o((_@c-_q5-_"p#-_$y^-e/'_$JM-_$1d-i5&e:&n?&_#48-oD(_&+r-aK(_&+~-iR(hY&n^(ne(nl&_"}o-_%I6-_J|-iq(ix(n"!&g"&(_&,,-g"-(g"4(_\j-_$:;-u";(n"B(_#4-n"I&n"N&n"S&_%oz-g"X'g"^(g"e(_b2-_"NO-_#B1-_"IK-_"gA-_"!7-i"l(g"s(_\1-_%IB-_"L$-i"z&i#!&_$:G*g#&(n#-&_JO-g#2&n#7&_#rJ*e#<&_"a_-o#A'e#G'_%9Z*_"G:*u#M(_$Uy*_$Um-i#T(u#['g#a(_%(H-_#L!-_$m-*_#>>-n#h(_"DL-n#o'h#u'_"Pw-_%p4-u#{(_#Pt-_%p(-_%(T-g$$(e$+'_#k--n$1'g$7(n$>'a$D'a$J'g$P(_"}{*_"(g*n$W(_&,D-_"J_*_"ak-_#*b-_&,8-m$^'a$d'n$j'_&,P-_&,\-e$p'g$v(_#Q"-_%[H-i$}(u%&(d%-'_$m6*_#G&-u%3(o%:(_$)0-_so-a%A(a%H'n%N(e%U(_]Z-_%[]*a%\'_&,h-g%b(i%i(n%p'_%IN-u%v'_o(-_%[T*i%|(g&%'_&,t-n&+'_"yf-_%9c-a&1'h&7'a&='a&C'n&I'_%p@*i&O(_";C-_wP*u&V(_}l-n&](_"sr-n&d'i&j'g&p(_#kB*_#`S-_#B=-a&w'n&}'n'%(_%9o*_$A8*n','_#k9*n'2'_$V$*i'8(_9;-g'?(n'F(_#Ks-_#/*-n'M(_%IZ-l'T'_$aA-e'Z'_"[[-n'`'_$1p-n'f'_%[f-a'l'i'r'n'x'_%pI-a'~'_#@*_"q-a(&'g(,(_"4Y-a(3'a(9'_x+-n(?'_$ys-a(E'i(K(n(R(n(Y(e(`'e(f'f(l'e(r(_&-"-e(y'n)!'n)'(n).(n)5(_"vx-e)<'_%9x-n)B'_(V-h)H'f)N'_%[r-_#7k-u)T(e)[(n)b(n)i(_"[g-_%:&-_&-.-t)p'_"p/-_&-:-__b-_%pU*i)v(a)}'_%p^-u*%(_$:P-o*,'a*2'_lj-i*8(e*?(a*F(_$:\*_#BI-_%\,*_$m?*_"p;-o*M'a*S'_"?^-o*Y'n*_'n*e'_$z!*_"d>*_#yh*_"&H*e*k(n*r'_#G2-n*x'u*~(g+'(w+.'u+4(e+;(_::4z+B'j+H'h+N'_&-R-o+T(a+['_#kK*g+a(h+h'g+n'e+t(a+{'_%pj*s,#'i,)'n,/(_#yq*_%\5*g,6(_#Q.*_%:2-_cs-n,=(i,D'_"w&-a,J'i,P'n,V'_%If-_p$-_#]/-_um-n,\(_&-F-_#y\-a,c'a,i'_%[~-_"%N-_"y~-_#yz-_&-^-_2m*_$mH*u,o(_&-s-_#kT-g,v'a,|(u-%(u-,'_&-j*h-2'd-8'i->'x-D'h-J'e-P(g-W'n-]'_"yr-i-c'_#`_*i-i(i-p(n-w'i-}(_$z*-i.&'_%:>-o.,'_$1|-s.2'n.8'a.>'_Pu-n.D'_$AA-n.J'a.P'_tb-n.V(_#*n-_$mQ-u.]'n.c'n.i'_%Ir-a.o'_#k`-g.u(_#4D-_%I~*_%:J-_"B]-e.|'d/$'x/*'_&.!-n/0'g/6(n/=(a/D(a/K'n/Q'a/W(_&.N-g/^(_$AM-n/e(n/l'_")6-g/r(g/y'g0!'_%(`-a0''_"aw-_"lF-_#'D-g0-'_"Sn-n03'_"z,-g09(_#rS-g0@(n0G'_$z6-i0M'n0S'g0Y(_$zB-_%\>-g0`'o0f(_"7)-i0m(_%ps-_$V--n0t'_"1X-_%J)-a0z'_$V9-_$)<-u1"(n1)'g1/(n16'_&.--g1<(o1C(_#*z-g1J'x1P'a1V'_">+-_$)H-_&.9-_uy-_#Wb-_"2x-_",E-g1\(_YX-_&.E*n1c'n1i'_9k-n1o(g1v(g1}(_".j-n2&(_$VE*_"dG-_#r_*_""E-_#BU-q2-'_%:V-h23'_%(l-_"z8-_$m]-n29(_&.f-u2@'_&.r-_&.Z-n2F(a2M'r2S'_#Ba*i2Y(_$2**_%q!*a2`'n2f'f2l'i2r'i2x'_$#**_%q**_$VN-_%\J*a2~'_$aM-o3&(_##t*n3-(n34(_#kl-_&.~-n3;'_">7-i3A(_%(x-_"zD*_#`h*e3H'_#/6*h3N'g3T'g3Z(_"4e*n3a'_%\S*_$mi*i3g'_$#3-g3m(_#Bj*g3t(_&/,-n3{'_(>-_$AY-_"^J*i4#'n4)'_$2<-g4/(g46(h4='g4C'g4I(_"jQ*_$VZ*_$23*_$mr-_%\\-_$2H-n4P'e4V'n4\'_#L--n4b'o4h(n4o'_%:b*e4u'o4{'_Pl*_%q3*_Js*m5#'q5)'_(u*_jN*a5/'n55'a5;'_"j!*_&)q*_od*a5A'n5G(g5N'i5T(_$zN-_#rh*n5[(g5b'_%\h*_""Q-z5h'_%n<*n5n(s5u'g5{'q6#'_#3N*u6)'u6/'_%Yz*n65'_%)/*i6;'i6A(g6H'_$yC*_%)8*s6N'g6T(y6['_$aY*u6a'o6g'n6m(_$:e*n6t(_(2-_"?R-h6{'n7#(n7*(_21*g71(_$@f*l78's7>'a7D(a7K'a7Q'n7W'_%8%*_$)T*_$ab*n7](n7d(g7k'a7q'u7w'_".^-u7}'_{_-h8%'a8+'h81'_"9T*a87'_"*\*s8='_#l&*n8C'_&)z*_#Bs*i8I'g8O(e8V(b8]'_%:k-_"b%-h8c'a8i'g8o'_#gm-g8u(_&/8-_##}-n8|'_&/D-_%)&*_$An*_#G>*_%)A*a9$'r9*'i90'n96'_$:n-n9<'_%\}*o9B(_$B"-_$B"-_$Aw*u9I(u9P(_$Ae*_-H*a9W'z9]'g9c'a9i'_%\q-_#rq*i9o(_"GC:_#kx-g9v(_$?a*_$:z*_"&Q*_?g*_$2T*o9}(_[;*g:&(g:-'_#l/*i:3(n::(g:A'_%;,*g:G'n:M'a:S'n:Y(_EO*_s6-u:`'_&0+*i:f(_$BC-n:m(a:t'_dW*g:z'_&/P*_"/f*n;"'_$m~*g;('g;.(e;5'a;;'_"pG*_#`q-_#Q@*_"dS*n;A'g;G'_&(-g;M(_%qi*n;T'o;Z'u;`(i;g'_#C'*_"`0*g;m(e;t'y;z'_36*o<"'n<('n<.(o<5'o<;'n<A'_%](-_`.*u<G'e<M'x<S'a<Y'u<_'_$#?-u<e'u<k's<q't<w'i<}'u=%'i=+'h=1'_%qi*_fm*_%)J*_bP*n=7'_%]4*_&/Y-n=='o=C'g=I'_&0"*a=O'm=U'n=['_%q`*n=a'n=g(e=n'g=t'a=z'_$zZ*o>"'_%qr-_$a}-h>('_#gy-_&04*_"IW*n>.(n>5(n><'_$2o*_&s*_#vh*_Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_"s--_#Jb-_S,-o!&n&(g-(_$E6-_"7:-_$63-a4&_"Dp-_$EB-g9'_$6?-_"BV-g?(_$EN-_$6K-_"x(-_"Vg-_$6W-gF(gM(gT(_wc-_",/-_"{s-_"<c-_#Jn*a[&n`&_#2,-ge(al&gq(nx(n"!&n"&&_"mr-_"e2-i"+'_#*m*_"$4-_{b-i"1'_"G=-_"S"-n"7&g"<(_#di-g"C(n"J(n"Q'_$6c*_#du-i"W&n"\(g"c'n"i&_"GI-_#CK-_$EZ-i"n&_"Vs-_#og-_"e>-n"s(_"P%-_#{s-n"z(_#{g-_#S,-_Uj-_h/-_"?t-_UI-_|p-n##&u#(&n#-(n#4(g#;'_#os-_#|!-_"GU-g#A(_Dn-_$Ef-n#H&g#M(_"/q-g#T(g#[(_"]d-_#o[-_#<{-_"7F-a#b&_B4-g#g'g#m(n#t(__K-_ae-o#{(n$$'_"D|-n$*(n$1(g$8'n$>(_"%c-_"S.-_#CW-n$E'n$K&u$P'_$*!-n$V(g$](_"Ln-_"S:-_#=)-_&7-_%}-i$d'u$j'_"9t-_#\Y-_"JO-_"]p-i$p&_$Er-o$u'_#Cc-_Gx-o${'_"]|-_$F,-_$F8-_1i-n%#'n%)'g%/(g%6'_#Co-g%<'g%B'_#\e-_#\q*u%H(_"J[-_#Jw-h%O'i%U'i%['_"P1-n%a'_$FD*a%g'l%m'_$FM-i%s(h%z'_]h-_#6m-_"x4*_$6l-a&"'n&((_2/-_<d-_$E~-n&/(n&6'_#C{-_G?*_#p!-_#28-a&<'a&B'a&H'e&N(i&U'u&['_"@"-j&a'g&g'_ZV-_#e#-_"s9-w&m'_#2D-n&s'n&y'h'!'g''(n'.'_10-g'4(n';'_#\z-o'A'g'G'g'M'n'S'_"W!-_(k-o'Y'i'_'g'e(_$FY-_$Fe-_$Fq-n'l'g'r'_#D)-_"i4-_$F}-_L--_#p--_.{-_;q-n'x'_>V-g'~(_"7R-_"SF-g('(_Nm-g(.(_#|--_J(-_"E*-_#K%-g(5'o(;(_$G+-g(B'_$G7-g(H'_#p9-_"E6-_g$-i(N'o(T'_$*--g(Z'g(`(_"|!-_"aZ-_"$@-_$GC-u(g'e(m'_#](-a(s'_"Ga-n(y'u)!(_#K1-n)('g).'a)4'u):(a)A'i)G(_$GO-_",;-_$G[-g)N(_#]4-n)U'i)['y)a'_#=5*g)g(o)n'_#=5*_#=5*g)t(e){'g*#'_#D5*_#pE*a*)'_4Z*_$Gg*_iF-n*/'g*5(g*<(_$Gp-g*C(i*J(u*Q(a*X'u*^(n*e'g*k(n*r(i*y'_"i@*_e)-_#pZ-_#n)*_"n*h+!'_$*B*h+''_YK*i+-'_NO*y+3'x+9'_qP-_"V:-_6^*u+?'_"hV*u+E'n+K's+Q'_"Bb*_#zV*i+W(_#1?*_#e/*_#]@*a+^'i+d'_$6x*n+j(n+q'_?p*_#z_*_"'I-_/)*n+w'_dK-a+}'i,%(n,,'i,2(n,9'h,?'_%G-e,E(_$*9*_#pN-e,L'o,R'n,X'x,^'_#6y*_@9-o,d'a,j'n,p'g,v(g,}'_#pf-_#7$-_#7$-o-%'h-+'f-1'i-7(_"af-_")#-_"|--_#$4*_4c*_#]I-_"|B-q->'_Vi*g-D(n-K'_$H'-a-Q'_$7/-_$7;*n-W'a-]'_a/*_l.*_#pr*n-c'o-i'g-o'_3X*_"n)*h-u'y-{'_#70-x.#'_#K=*_O]-u.)'u./'g.5'_#=>*s.;'u.A'g.G'i.M'i.S'i.Y'n._'i.e'_Uv-a.k(h.r'o.x'n.~'i/&(a/-'e/3'g/9'g/?(n/F'g/L'n/R'i/X'g/^'g/d'_#D>*n/j'y/p'i/v(d/}'i0%'_#KF*_#KF*g0+'_$G|*g01'n07(_"n2*o0>'i0D(_4l*_"|9*_#SD-_"Zi*_"sQ*g0K(_"vc*_"m~*g0R'_""H-n0X(n0_'g0e(n0l'a0r'g0x(a1!'n1''_"'U-_#Bj-w1-'d13'_"<E-_$*K*o19'_j0-g1?'z1E'_#DG*_$*T-n1K'g1Q(r1X'a1^'_j<-_#p{*e1d'_#*v-i1j'_"n;*n1p(a1w'_'u*i1}'u2%'_"G1-k2+'i21'_Zb-_"<o-_C<-a27'h2='g2C(_#]U-o2J'h2P'i2V(_#7<*h2]'i2c'e2i(_#]a-_$*l*c2p'n2v'_"|W*g2|'_NX*e3$(_#C*g3+(i32'_#|N*a38'n3>'a3D'l3J'__c4_#+$-_$7D-j3P'_$f*_$H3-i3V(o3](n3d'g3j(o3q(h3x'g3~'u4&'_#|9*_#|B-a4,(n43(a4:'l4@'_"|N*i4F'_#qJ*a4L'_#SP-_"nD-_"!4*_"EB-_.K-_"iI-e4R'h4X'_#=G-a4^'_Dz-i4d(u4k'a4q'i4w'_$*`-n4}'i5%'_#q2-a5+'n51(g58(_#S\-i5?(g5F'_#]m-m5L'a5R'i5X(_$7P-_#|W-_$H?-i5_'i5e'n5k(g5r'_Vr-_#q>-_-I-n5x'a5~'_#q&-_"x=-g6&(_"!4*_",G*_0C*u6-'_#$=-_""T-u63'_\l-_"|`*a69'o6?'_$HK-n6E'_#+<-_$HW-i6K'i6Q'_#+0-i6W'n6](_#e8-_#]y-u6d'_#2P-n6j'n6p'_Ae-_R!-_:B-_e>-g6v(_$Hc-_"nP-_jH-e6}'g7%(_$*u*_$Ho-_"2K-_#7E-h7,'_#=S-_$7\-_""`-_#eD-_aq-_",P-_$7h-g72(_$*~-g79'_#KO-g7?'_$I)-_ra-u7E'n7K'_"W--_4u*_Jg*g7Q'_"ar-_E_-g7W'i7]'_#|c-g7c'_#qS-n7i(u7p'_$IY-_$Ie-_$IM-n7v(h7}'u8%'n8+'_*i:n81(i88(g8?(_$+8-_bI-_#eP-_"n\-_"sZ-_":"-n8F(_$7t*_$Iq-n8M(a8T'_9*g8Z(a8a'i8g'g8m(_v3-e8t'_$+,-_$I5-_$IA-g8z'n9"'i9('_31-_wo-i9.'_#|{-_eJ-_"Jg-_#7Q-g94(_#7]-g9;(_#|o-o9B'n9H'u9N'g9T(n9['_$H{-_#+H-e9a'h9g'u9m(n9t'e9z(o:#'o:)'a:/'_I@:g:5'n:;'_"xI-n:A'_"^6-e:G(_\x-_"nq*_"Js-n:N'_#^'-a:T'a:Z'_$Jm*a:`'_"nh*n:f'_"xU-_$K!*i:l(_$Jv*i:s'n:y'_$K**a;!(_$J+-_$J7-_$JC-_F%-_$JO-_#=_-_$J[*g;((_$Jd*_{n*_YT-g;/(_#2\-_#e\-_#Kg-_Tz-_$84-u;6'_$8+*_"|u-_$K3-l;<'u;B'_#$I-_"W9-n;H(o;O(_l7-n;V'i;\'a;b(_"sf-_m{-_"iU-e;i(g;p'_"}#-_(w-_.c-n;v'_"/}-i;|'_$K?Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
n!&_"<s-_"{M-n&'_[N-_"<g-_"Q(-_"(n-_"Lf-n,'g2'_"f;-n8&_""5-_"sR-g='gC'_x^-_Qc-gI'_"Hj-_"a7-_"Lr-_WR-nO&_"fG-_RY*gT'nZ&_"{Y-_"VA-g_'ae&_"A/-_"[$-_cz-_"fS-gj'_"/n-_"sg-_"s^*ip'_)F-_"A;-_"/z-_"Q4-_}&-_"ss-_"mL-_uI-_"{e-_N*-gv'_2:-_"=!-_"mX*_=<-_$H-a|&_qA-_si-_E)-g"#'_",M-_su-_<j-_/=-_"5_-i")'_W^-_qM-g"/'n"5&i":'_"{}-i"@'n"F'_"AG-_"t!-g"L'n"R'n"X'n"^&_"VM-a"c'a"i&i"n&_}2-e"s&g"x'g"~'a#&&_"{q-g#+'_"[0-g#1'_B)-_$u-_S%-_aU-n#7&n#<'_"|+-g#B'_LV-_p6-_"L~-_"|7-_"M,-_=H-_"0(-_Gj-_5R-a#H'_ly-_4D-_",Y-a#N&n#S&n#X&g#]'_"|C-g#c'_uU-n#i'_"[<-n#o'_"EF-_"Q@-g#u'_?_-u#{&_"ER-n$"'_"|O-__J-_,%-i$('_K*-_"t-*_"%Y-_"|[-_"2z-_"ma-i$.'_"L--d$4'_"f_*_"/\*_>V-e$:'u$@'a$F'u$L&i$Q'i$W'e$]'_N`-h$c'_"AS-o$i'_eR-_"!i*g$o'g$u'_:u-_"Hv-_=T-_#5k-_e^-u${'_"=--n%#'u%)'g%/'i%5'_Lb-n%;'g%A'_"[H-_aa-_)^-e%G'u%M'_"QL-i%S'_"[i*g%Y'n%_'g%e'o%k'g%q'_NK*_*u*u%w'o%}'u&%'e&+'_t#-w&1'h&7'_kY-w&='_6Z-_In-a&C'j&I'j&O'_"|s-e&U'n&['_^<-_"[]-n&a'n&g'b&m'_"|g-g&s'u&y's'!'n'''_0'*_ua*g'-'i'3'_"t6-i'9'_t/-_}>*_>b4_"}!-n'?'_"fh-_"[T*_*l*_"I$-_ke-_"[r-g'E'i'K'_""A-n'Q'g'W'e']'i'c'n'i'_&%*h'o'g'u'_"}--i'{'n(#'_g2-n()'_"=9*i(/'a(5'_xR-u(;'e(A'n(G'e(M'_"9O-u(S'u(Y'_"=B-a(_'n(e'_"mm-h(k'g(q'z(w'_"}B-_"}9*n(}'n)%'g)+'n)1'i)7'i)='_"Ak-_"my-g)C'_"I0*_"[~-i)I'd)O'a)U'_"A_-_",e-n)['u)a'a)g'i)m'n)s'e)y'_}G-_"Ve-_`U-o*!'a*''g*-'n*3'n*9'_"VY-_""M-_"n'-_Py-e*?'o*E'_"\,-_S1-a*K'_"QX-_m'-__V-i*Q'_"tB-_TL-_K6-n*W'n*]'g*c'_/I-_:]-_qY-_"n3-i*i'g*o'g*u'_"}N-n*{'_"E^-u+#'_"9[-_7,-_@%-a+)'g+/'_7t-_%S-_.5-_1D-_"Ej-o+5'_"ft-e+;'o+A'g+G'_"}Z-_"}f-_"%e-_"}r-_"nW-n+M'_",q*n+S'_)v-_"aO-_zz-_<:-g+Y'n+_'_w/-_"n?-_"Qd-n+e'g+k'_Ln-_"aC-_C@-n+q'i+w'_"I9-g+}'_"nK-_3~-_&^-o,%'_8:-g,+'g,1'_"~8-g,7'n,='n,C'n,I'g,O'_",z-_]"-g,U'_"}~-_"~,-_"a[-o,['i,a'_uj-_"g"-_"IE-g,g'n,m'_"%q-_"Ev-_t;-_S=-a,s'i,y'_"5k-n-!'_^H-o-''u--'_"tN-a-3'n-9'_tG-n-?'n-E'i-K'o-Q'_>u-_"ag-_Gv-n-W'__b*h-]'g-c'n-i'_"g.-_&F-o-o'a-u'_"g:-n-{'_Nl-u.#'_"as-n.)'_7D-g./'n.5'n.;'a.A'i.G'i.M'_B5-n.S'_"M8-_"\8-a.Y'g._'_m3-g.e'_"Aw-_ML-_pB-i.k'h.q'u.w'_"~D-n.}'g/%'n/+'_K{-_{(-_"gF-_Z4-_:i-g/1'_Us-g/7'_"Vq-n/='_"IQ-a/C'g/I'_"Qp-_Z(-n/O'g/U'i/['__k-_[Z-_,U-_SI-_V!:_Wj-e/a'_"Q|-g/g'h/m'g/s'a/y'h0!'e0''i0-'_"5w-_N6*n03'_"I]-_"~\-n09'_"~h*_"no*g0?'_qe-_tS-_"=N-_hp-_}S-_"gR-_"9g-i0E'e0K'_Ao-n0Q'_d_-_m?-_"nc-_"F$-_"~P-g0W'_"b!-_"~q-n0]'a0c'_3!-_V:-_CL-g0i'__w-_"Ii-n0o'g0u'g0{'_Qo-g1#'_"tZ-_uv-_ay-_O_-g1)'_3--_am-a1/'u15'_MX-_"g^-_"V}-o1;'_"34-_Iz-_"2-a1A'_"(z-n1G'_^T-_=`-n1M'n1S'g1Y'e1_'_Z@-_#!+-_#!7-_Wv-g1e'n1k'_"04-_"3(-_"6%-_}_-n1q'a1w'_"~}-_"R*-_[f-g1}'n2%'_"gj-n2+'_RA-_#!C-_"b9-_"b--_"MD-g21'_TX-n27'_xj-n2='o2C'_$i-_w;-_}w-_"9s-_>&-g2I'u2O'_"61-_}k-_"6=-_"_-o2U'e2['_9<-_?/-g2a'_FD-_"B%-_mK-_"W+-_"bE-_I&-_"bQ-_#!O-_"nx-_^`-g2g'_8.-o2m'u2s'_F8-_#!g-_G"-_#![-g2y'_"-(-n3!'_##/-n3'&a3,'_5F-h32'_"Iu-_h|*_")(:i38'_#!s-u3>'n3D'm3J'a3P'a3V'a3\'o3b'_"-4-g3h'u3n'_#"u-n3t'n3z'n4"'h4('_qq-_i'-u4.'n44'_i'-_###-o4:'_"WC-i4@'_"F0*n4F'n4L'_":!-a4R'_%/-a4X'_VF-i4^'h4d'_>2-_"o&*_"\P-_3]-_g>-n4j'n4p'_"\D-_"R6-_"R6-i4v'n4|'n5$'g5*'_`a-n50'_"%}-a56'_""Y-_"W7-_"gv-_"tf-_#"!-_#"9-_#"--_#"E-n5<'_Z-_#"Q-_#"]-_#"i-_")A-_n>-g5B'_ZL-_b'-i5H'_"\h-_##G-a5N'u5T'_"=f-_{4-n5Z'i5`'i5f'g5l'_nJ-i5r'_"tr-u5x'_">*w5~'f6&'n6,'_"=Z-_)R-_nV-_"o/-_~%-o62'_EA-d68'_A3-_"B1*a6>'_"b]-i6D'_"W[-o6J'_j>-_q}-_"RB-_"h0-_"6I-_Md-a6P'_E5-u6V'_"h$-_P1-n6\'n6b'o6h'_##;-g6n'o6t'u6z'd7"'m7('_H<-_"WO-_""e-_##S-_f0-_jJ-_"-@-n7.'_3Q-_3Q-_"B:*e74'_"w-n7:'_:3-n7@'_##_-_"RN-_VR-_f$-_"\\-_r+-_"&+-_##k-_"MP-g7F'_xv-_2O-_@m-a7L'_#^-_"3@*g7R'_"t~-Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
g!'_zD-_<P-_*:-g''_H5-__!-_6v-g-'_zP-g3'__--n9&_rO-_4~-_v*-o>'__9-_<\-_v6-gD'_=:-_z\-_6"-_nV-_,&-_=j-gJ'_:|-nP&aU&iZ'_nb-_\K-n`'_NY-_OO-gf'_zh-_zt-_/h-nl'gr'gx'_,2-_X:-_kh-_JQ-_4B-a~&g"%'_i4-_Wt-u"+&n"0&o"5'o";&_i-a"@'_Du-_E#-u"F&_.B-j"K&_he*_vN-_{"-_vB-_O[-a"P&g"U'_BA-n"[&_Pr-a"`&_vZ*_5\-_VN-_i@-k"e&a"j'n"p&_r[-_iL-a"u&e"z&a#!&_E/-i#&&i#+'_{:-g#1'_[@-g#7'a#='_{.-o#C'h#I'_{F-_[L-_9>-_;r-g#O'_rg-_"G-_&%-_7$-i#U'e#['g#a'e#g'_{R-_8&-_"w-g#m'_IC-n#s'n#y'_cA-g$!'_>l-_nn-__E-_2&-g$''e$-'h$3'u$9'g$?'_f`-y$E'_{j-_fl-a$K'_S`-_nz-e$Q'_{^-_kt-_D!-n$W'_HA-g$]'n$c'_o(-o$i'_aU-g$o'g$u'i${'_Y`-n%#'__Q-g%)'g%/'_{v-_Yl-_E;-_,V-g%5'_vc-n%;'_1$-_|$-n%A'_|0-_|<-_(r-_|H-_70-g%G'g%M'_-p-_:(-_&m-_aa-_&I-_|T-_|`-_Ek-_@%-_Sl-_cM-_XF-_|l*_A'-a%S'_U(-_Yx-n%Y'_U4-g%_'_iX-a%e'o%k'g%q'g%w'_o@-a%}'_o4-g&%'e&+'_\W-g&1'_Mo-_cY-g&7'_R:-g&='_oL-g&C&g&H'n&N'_am-_rs-g&T'o&Z'_6^-_+`-e&`'e&f'o&l'_Ew-_CC-g&r'_*"-_F%-g&x'n&~'_ce-_|u-_$W-_CO-_ay-_.*-i'&'_7<-n','e'2'n'8'_id-_oX-_}/-_};-_l"-n'>'_2V-_}#-_}G-o'D'_EG-g'J'_fx-_*j-_U@-_1H-n'P'a'V'_LU-o'\&_GW-g'a'g'g'_UL-_cq-_K_-_2b-_vo-n'm'_c}-_ip-_UX-_l.-g's'_d+-_9J-_VZ-_Kk-_"S-_P~-_Q,-_$c-u'y'_Gc-_>0-g(!'_u-n(''e(-'u(3'i(9'g(?'u(E'n(K&_}S-n(P'_XR-_v{-o(V'g(\'g(b'g(h'e(n'_RF-_BM-_}_-_}k-_22-g(t'n(z'n)"'_AW-e)('g).'g)4'a):'g)@'g)F'_}w-_:d-_IO-g)L'_od-_\c-n)R'a)X'_A3-_R^-_Ac-_~%-n)^'_+l-e)d'u)j'g)p'_(B-a)v'n)|'n*$'u**'n*0'a*6'_RR-g*<'n*B'_M{-_w)-a*H'u*N'a*T'g*Z'_~=-g*`'_~1-_&=-n*f'_op-_><-i*l'_La-o*r'_l:-n*x'a*~'_1l-_s!-n+&'_~I-n+,'i+2'n+8'g+>'g+D'g+J'_J]-u+P'n+V'g+\'_o|-g+b'g+h'_Rj-o+n'_Q8-_Ji-a+t'a+z'u,"'z,('_I[-_)D-n,.'n,4'_Ne-_X^-_Ji-_@=-_@1-u,:'g,@'n,F'g,L'_>H-_p*-_C[-_Ud-_Ao-_g&-_Xj-_\o-_[X-_<h-g,R'g,X'_Nq-__]-_?V-_)h-_~U-_d7-_dC-n,^'_+<-_Og-_wY-_QD-_\{-n,d&_wM-_wA-_F1-_&y-_Vf-a,i'u,o'_A{-g,u'o,{'g-#'g-)'_)P-g-/'_Vr-n-5'_we-_lF-_s--g-;'_+T-g-A'g-G'_Sx-_N}-n-M'g-S'_~a-_.f-i-Y'_@I-n-_'_ES-_2>-a-e'_Ig-n-k'o-q'_g2-_%b-g-w&_~m-n-|'a.$'_Rv-e.*'_]A-_wq-_;~-i.0'_'o:_]5-_1T-_"!3-n.6'_;*-n.<'_w}-_D--n.B'_V~-_]-a.H'n.N'_Is-_"!?-u.T'_j6-_"!K-_j*-o.Z'_'K-_s9-_/8-_~y-_"!'-g.`'_])-_dO-g.f'e.l'_x+-_w5-g.r'_9&-_W,-_i|-_=v-u.x'_S$-_W8-_jB-_7H-_%5-_!-_d[-_"!W-n.~'g/&'g/,'g/2'_]M-_]Y-e/8'g/>'o/D'_"!c-g/J'a/P'_"!o-_Ju-n/V'_8>:g/\'g/b'u/h'g/n'_lR-_<,-g/t'n/z'_Bq-_"!{-_dg-_"")-__i-g0"'n0('i0.'_Cg-_*F-o04'_$3-_Lm-_.r-g0:'_""5-_x7-_p6*u0@'q0F'_g>-n0L'n0R'g0X'n0^'n0d'n0j'u0p'_N)-h0v'i0|'g1$'u1*'_N5-_K#-g10'_/P-n16'_p?-_T&-a1<'_""A-n1B'h1H'g1N'_ds:_gJ:_l^-_pK-_(Z-n1T'g1Z'_J!-_jN-_0v-_&1-_Fy-a1`'_*.-g1f'_""M-_e.-g1l'_sE-_;6-g1r'_HM-_sQ-_""Y-_""e-g1x'g1~'h2&'_NA-g2,'_xC-g22'_Kw-a28'_#a-_J--n2>'g2D'_QP-_gc-g2J'_J9-_pW-_Z&-_(~-u2P'g2V'_@U-_Os-_b'-_e:-_lj-_;B-_xO-n2\'n2b'g2h'_O+-_WD-n2n'_NM-_3d-_pc-_x[-_(f-_6R-_:4-n2t'a2z'_Q\-a3"'_10-_xg*g3('_HY-n3.'_<8-_jZ-g34'_po-_Z2-n3:'_1<-g3@'u3F'__u-_""q-_D9-_]e-_p{-i3L'_Qh-_""}-g3R'_`#-a3X'_DE-_"#+-a3^'n3d'g3j'g3p'g3v'e3|'n4$'_T2-_)8-_`/-_`;-_si-n4*'_6j-_"#7-u40'e46'h4<'_G'-o4B'_"#C-_s]-_K/-_;N-_lv-n4H'_F=-_Xv-n4N'_q)-_Y$-o4T'g4Z'_K;-_,J-g4`'g4f'n4l'_P!-_"#O-h4r'g4x'_ZJ-o4~'i5&'_Z>-_#U-e5,'_Y$-_<t-o52'z58'_eF-_7T-_P--_m$-g5>'_He-_Up-_,>-_]q-_m0-g5D'_su-_go-_9-n5J'_"#[-_"#g-_xp-_ZV-_"_-_%V-_m<-_mH-_&U-_"#s-_KG-_t#-n5P'_b3-_t/-_5h-g5V'_]}-_[d-g5\'_'W-_Cs-g5b'_t;-_4Z-g5h'_92-_>x-_"$!-_3@-_3p-n5n'_9V-n5t'_L%-a5z'g6"'_^+-g6('n6.'g64'_DQ-_3L-_Qt-_"k-_D]-_`G-_;Z-g6:'u6@'o6F'_q5-_"$--n6L'g6R'i6X'n6^'_x|-n6d'_`S-_y*-g6j'e6p'_1`-_bK-_''-a6v'a6|'n7$'_tG-_Y0-o7*'_b?-_U|Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_4;-_HK-_3--_C}-g!'_A1-_39-_9i-g''n-'_M=-_6'-_7}-_8s-_O5-_OA-n3'_8C-a9&g>'_IA-_!-_";-oD&uI&nN&_0o-gS&nX'o^&_Am-gc'ni'no&nt&ny'_,7-_MI-d"!&_@G-_OM-e"&'_.S-_?9-_---_OY-n",'_)a-_Bo-_Ie-_K!-_9--n"2&u"7'o"='_:S-e"C'n"I'_Oe-_9!-_Ay-g"O&_1e-_63-_/=-_B{-_5%-_'Q-_D+-_MU-_-9-g"T'_-E-_*c-n"Z&g"_'_51-n"e&_D7-_Fw-_'--o"j'_<3-n"p&_3E-_Ma-_Iq-_]-_G1-_G%-_1q-_./-_0'-n"u&_#=-_Oq-_DC-g"z'_Mm-_&[-n#"&g#''g#-'_O}-_7A-_)%-n#3&_i-_)y-_5=-_I}-_=q-_K--_3Q-_"#-_<?-_0K-_4S-_P+-_7M-_E-g#8'_(;-_EQ-_#%-_PO-n#>&_'9-_-i-_P7-n#C&_K9-_P[-n#H'_$3-_0{-_PC-_Pg-n#N'g#T'i#Z'_HW-_Q!-_(G-_'u-_3]-_<W-g#`'n#f'_<K-g#l'n#r'_Ps-i#x'_;U-_E]-_KE-_G=-_)I-g#~&n$%&_/a-g$*'_-!-_8O-_Q--_?E-_4G-_4_-_8g-_DO-_Hc-_=}-_GI-n$0'n$6&_5I-h$;'g$A'g$G'_<c-_Q9-g$M'_%M-_J+-_QE-_<o-_--n$S'a$Y'_?Q-_:_-_7e-_C)-_Ei-g$_'_6?-_B'-_+M-_#a-_J7-_C5-_QQ-n$e'_D[-n$k'_u-g$q'n$w'_My-n$}'g%%'_,C-_/m-i%+'_+)-_Qu-_JC-_Q]-_Qi-n%1'_+A-a%7'_KQ-_*3-_>+-_?]-_A=-_%A-_GU-_R#-n%='g%C'_-u-_2C-_Dg-_2O-_AI-_:k-_*o-g%I'_K]-_.k-_9u-_.w-i%O'_*K-_Ho-_Ga-_Ki-g%U'g%['a%a'i%g'u%m'_>7-a%s'_-Q-_N'-n%y'g&!'u&''_B3-_H{-_CA-n&-'_3i-_JO-_>C-_3u-_(_-e&3'_Ku-_5U-n&9'g&?'_L#-_L/-_>O-_1M-g&E'_(/-_<{-g&K'g&Q'_Eu-n&W'_%}-_R/-_>[-_F#-_'i-o&]'_5a-_L;-n&c'n&i'_:w-_?u-_*'-_F/-n&o'g&u'g&{'_6o-_=)-i'#'_B?-_N3-_,[-_=5-_>g-_@#-_R;-g')'u'/'_03-_*{-_;m-_;a-n'5'h';'_/y-_)=-g'A'_AU-_N?-_'!-_LG-_(w-_Ds-g'G&n'L'_7Y-_:#-_,s-_,+-_Gm-_$c-_BK-_0W-_BW-a'R'_F;-g'X'_4#-n'^'n'd'_$K-g'j'_;%-_+Y-_99-_8+-_CM-_CY-n'p'g'v'_"/-g'|'g($'g(*'_9-_15-_NK-_RG-_RS-a(0'_1)-_@S-_@_-_FS-_R_-_*W-_/I-_FG-g(6'g(<'_8[-g(B'_I)-g(H'g(N'_:/-_S%-g(T'_S1-_#U-_Rk-_LS-_Rw-_'E-_@k-_)U-_S=-_2s-_@/-_#y-_NW-n(Z'_?i-_&C-k(`'o(f'_6{-_&+-_/%-_9E-_I5-_,g-_Gy-n(l'_EE-n(r'_+e-_Nc-g(x'_6K-_J[-_No-n(~'n)&'e),'_:;-_"G-_"_-_(S-_9Q-_SI-_SU-_3!-_L_-_2[-_8g-_.#-_Sa-_;1-_Sm-_0c-_H'-_@w-_T'-n)2'g)8'_Lk-_N{-_T3-_T?-_TK-_TW-_Tc-_2+-e)>'u)D'e)J'_/1-_7)-n)P'_Sy-n)V'g)\'g)b'_.;-_/U-_Lw-_75-_E!-_+q-i)h'_0?-_Q-n)n'_To-_)1-a)t'i)z'_>s-_&O-_&g-_E--_U)-_(k-_T{-_U5-g*"'_;y-_H3-_<'-_4k-_;=-g*('_5m-_M%-_$o-_1Y-_2g-_O)-g*.'n*4'_UA-_+5-_A%-_(#-_H?-_7q-_9]-_?!-g*:'g*@'_%5-_Ce-_&s-_@;-_4/-_+}-_1A-_UM-_=A-g*F'_Cq-_?--_Jg-i*L'g*R'_%)-_)m-n*X'_1}-_%Y-_;I-o*^'g*d'_,O-_6W-_$'-_UY-_F_-n*j'g*p'_IM-_']-n*v'g*|'i+$'_87-_._-g+*'g+0'_Ue-n+6'n+<'_Aa-_Ie-_=M-_V+-_V7-_VC-n+B'n+H'n+N'g+T'_${-_Uq-_*?-g+Z'_$?-_"S-_5y-o+`'n+f&_IY-_#m-u+k'i+q'e+w'g+}'_-]-_U}-_%e-_#1-_.G-n,%'o,+'_%q-_"k-_&7-_:G-_"w-_VO-n,1'_Ie-n,7'_6c-_M1-g,=&i,B'i,H'n,N'u,T'_Fk-_Bc-g,Z'_Js-_27-n,`'h,f'_V[-_E9-_$W-h,l'_=Y-_#I-_4w-_=e-
|
||||
@@ -0,0 +1 @@
|
||||
_)y-_'9-_(S-_)I-n!'_(_-_--n''g-'_i-_&s-n3&_%e-_$o-g8'_9-_,7-u>&_.;-_"w-gC'_(#-_.G-_.S-_*o-_]-_._-gI'_#a-gO&_-E-gT'gZ&_,+-g_'_-Q-_&O-ge'_.k-gk'gq'_*'-_+Y-_$W-_(/-_$3-_,[-_-i-_#I-_#1-_E-gw&_(;-_)=-g|'a"$&_-u-_'i-_'!-g")'n"/&_'--_%)-g"4'_)U-g":&_"_-_+q-_.w-_$K-n"?'g"E'_,g-_(k-a"K&_$?-_,s-n"P'_.#-_']-n"V&_/%-_/1-a"[&g"`'n"f'g"l'_"k-_+5-_&g-_";-_-]-_'E-g"r'g"x'g"~'_+A-_%5-_&[-_*3-a#&&g#+'e#1&_/=-_Q-_#U-n#6'_)1-g#<'_"#-_#%-_/U-_*c-_/a-_$'-_/m-n#B'_'u-_,C-_*{-_/I-_*W-_/y-_*?-u#H&_%M-g#M&g#R'_-!-g#X'_&7-n#^'g#d'_"S-_(G-_#m-_0'-_---g#j'_+M-_)a-_)m-_${-n#p'_%q-_%A-_03-_0K-_0?-_,O-_0W-_*K-_(w-_-9-_)%-_0{-_1)-g#v'_15-g#|'_%}-_+}-_0c-_0o-g$$'_'Q-g$*&_1A-g$/&_1M-_$c-_"G-_!-_+)-_&C-n$4'_"/-_%Y-_#=-g$:'g$@&_u-_#y-_&+-g$E'_./-_+e-g$K'i$Q'a$W&
|
||||
@@ -0,0 +1 @@
|
||||
_$?-_%)-_&O-g!&_%Y-i&&_%A-_&+-_E-_#a-_u-_#I-_#m-_$W-_&[-_--_%M-n+&_&g-g0&_"/-_9-_"w-_%e-n5&_&7-g:&n?&_%5-_%q-_$3-_#y-_"G-_#=-nD&_%}-nI&_$o-_&C-_"_-aN&_]-_&s-_"S-_$c-_${-_"#-_"k-_#%-_$'-_$K-_i-_!-_#U-_#1-_Q-_";-_'!-_'--nS&
|
||||
@@ -0,0 +1 @@
|
||||
_!-_--g!&_E-g&&_Q-g+&g0&_9-i5&g:&
|
||||
@@ -0,0 +1 @@
|
||||
_$n/Qd!-j--n9(w@2xQ&_%6WfaV<bq&dv2e")-h"53i"G:j"`.l"m.m"z(o##@r#B(s#I.t#V.u#c:z#|4_%=nfb$1(c$8(e$?(g$F'h$L-i$X'r$^(s$e(t$l(z$s(_%)Nfa$z3b%.(c%5.d%B.e%O@f%n(h%u.i&$-l&0Mm&\(n&c4o&v-p'$(q'+(r'2(s'9.t'F.w'S.x'`(y'g(z'n(_%A3Cb'u4c(*(d(1(f(84h(K(j(R4k(e.l(r@m)3.n)@(r)Gds*,4t*?.w*L.y*Y(_%2~fa*`3b*r(d*y.e+(4h+;.l+H.p+U(r+\(s+c.t+p(u+w:x,2(_#|Qfb,9(d,@(e,G@h,f'j,l'l,r(o,y'r-!'s-':t-@.u-M'w-S(x-Z(z-a4_$|Vfa-t(b-{(d.$'e.*4h.=(j.D(l.K(m.R.o._'q.e(s.l(z.s(_"r^""a.z-b/(9c/@-d/L?e/j.f/w'g/}3h019j0I-k0U3l0g?m1'?n1E3p1W-q1c'r1i-s1u9t2/9w2G9x2_'y2e?z3%9_$WRfa3='c3C(d3J(f3Q(g3X(h3_(i3fWl4>:m4W.n4d(q4k(s4r.t5!(w5((x5/(y56.z5C._%?w_a5P@b5o(d5v(e5}@f6>(l6E.m6R(n6Y(s6`4t6s(u6z'y7".z7/(_%"7fa76pb8'Rd8X4e8k4f8~:g99.h9F(i9Mdj:2.k:?4l:R(m:Y.n:f.o:s'p:y:q;4(r;;(s;BSt;t.u<#Ew<G(x<N(y<U.z<b(_${4fa<i:b=$.d=14e=D:g=]-h=i(i=p4j>%(k>,(l>3.n>@.r>M's>S(t>Z.u>g:w?"4y?5(z?<(_"E!\a?C4b?V?c?t3d@(Fe@M.f@Z:g@sdhAX@iAw-jB%4kB8:lBQLmB|?nC<3pCN3qC`-rCl3sC~@tD??uD]'wDc3xDu-yE#@zEB9_$s'laEZ-bEf?cF&'dF,9eFD'gFJ-hFV3jFh'kFn3lG"3mG4?nGR3pGd'qGj'rGp-sG|3tH0?wHN-xHZ'yH`3zHr3_#eFXaI&-bI2.dI?(hIF(iIM'kIS(lIZ(oIa(qIh(tIo'xIu'zI{(_#C#fbJ$:cJ='dJC(fJJ(gJQ4hJd(iJk?jK+4kK>'lKD.mKQ.qK^(sKe:tK~(wL'.xL4.yLA4zLT(_%:*fnL[(sLb.uLo'wLu'_%/$faL{?bM;.cMH(dMO(eMV.gMc(hMj3iM|XjNU'kN[4lNn4mO#4nO64pOI'sOO.tO\:uOu.wP$(xP+(yP2(zP94_%=)faPL4bP_-dPk(ePr.gQ!'iQ''jQ-(kQ4.lQA.nQN(pQU(sQ\.uQi'wQo._%$^faQ|4eR14hRD(jRK-nRW'sR](tRd'zRj(_%0PfbRq(fRx'hR~(iS'-jS3'lS9.mSF(rSM(xST(yS[(_%8%faSb4bSu(eS|.hT+.iT8.kTE'nTK(oTR.qT_(sTf.uTs'wTy(xU".yU/.zU<'_#.&faUB'bUH.dUU(fU\'gUb-hUn-iUz-lV((rV/'sV5(tV<(wVC(xVJ(zVQ(_<]"DbVX?cVv?dW6FeW[-fWg3gWy9hX33iXE"MjYq-kY}@lZ>?mZ\9nZt"To\I"Np]v3q^*:r^C-s^OLt^zFw_A9x_Y4y_l@z`-@_$'?fa`L'b`R@c`q'd`w;ea3(fa:(gaA(haH.jaU9kam4lb"(mb).nb6.pbC.qbP.rb](sbd4tbw.wc&@xcE.ycR:zck@_#:5fbd,9cdD(ddK/edY(fd`(gdg=he%6je:(keA/leO0me^/pel(qes(rez(sf#6tf8/wfF=xfbDyg'DzgJ=_"qwfagf(bgm=ch+=dhG0ehV=fhr6gi)=hiE(jiLDkio6lj&=mjB(njI6pj^/qjl/rjz6sk17tkG=wkc/xkq=yl/=zlKD_$~$faln(blu6cm,/dm:=fmV/gmd/hmr/in""kjol6kp#/lp1(mp8(np?"drr$(sr+/tr9(wr@(xrG(yrN(zrU(_"&Yfbr\6crq6ds(6fs=/gsK(hsR(jsY(ls`6msu(qs|/rt,/st:6ttO/wt]6xtr(yty/zu)u_"^=fau}/bv-KcvW(dv^7evt/fw$(gw+/hw9/jwG=kwc(lwj=mx((nx/(px6(qx=/rxK/sxYRty,/wy:=xyV6yyk6zz"K_"McfbzL/czZ(dza7ezw=f{5(g{<Kh{f=j|$/k|2(l|96m|N6n|c(p|j(q|q/r}!/s}/7t}E(w}L=x}h(y}o/z}}6_>W"ba~41b~DDc~g6d~|De"!A"Gf""g6g""|=h"#:6j"#O/k"#]6l"#rKm"$>Dn"$a"Pp"&2/q"&@/r"&N=s"&jDt"'/=w"'K=x"'g/y"'uDz"(:=_kIfa"(V(b"(]6c"(r6d"))Ee")M=f")i=g"*'=h"*CKj"*mKk"+9/l"+G=m"+c(n"+j(p"+q(q"+x7r",0=s",LSt",~/w"-.6x"-C7y"-YSz".-h_"6Ufb".tDc"/9(d"/@6e"/U(f"/\(g"/c/h"/q6j"0(/k"06/l"0D6m"0Y6n"0n=p"1,/q"1:6r"1O/s"1]Kt"2)(w"20(x"27/y"2EDz"2h=_#nifa"3&/b"34Dc"3W=d"3sSe"4G6f"4\6g"4q7h"5)/j"57Lk"5bLl"6//m"6=>n"6Z=p"6v/q"7&Dr"7I6s"7^Zt"89>w"8VRx"9)>y"9F=z"9bL_"bPfb":/=c":K(d":R6e":g(f":n(g":u(h":|(j";%(k";,(l";3/m";A(n";H6q";](s";d7t";z(w"<#6x"<8/y"<F/z"<TK_o*fa"<~/b"=./c"=<(d"=C6f"=X(g"=_(h"=f(j"=m/k"={(l">$6m">96n">N(q">U(r">\(s">c/t">q(w">x(x"?!(y"?((z"?/D_#'j"ba"?R/b"?`/c"?n=d"@,De"@O/f"@]6g"@r/h"A"6j"A7/k"AE6l"AZEm"A~=n"B<=p"BX=q"Bt/r"C$=s"C@Kt"CjDw"D/6x"DD/y"DR6z"Dg=_$>efb"E%(d"E,/e"E:(h"EA/j"EO(k"EV(l"E]/q"Ek(s"Er(t"Ey/w"F)(x"F0(z"F7(_#X>fb"F>/c"FL(d"FS/e"Fa6f"Fv(g"F}(l"G&/m"G4/n"GB(s"GI6t"G^(w"Ge(x"Gl(y"Gs6z"H*=_#^&fc"HF(d"HM=e"Hi(f"Hp(g"Hw/h"I'6k"I<(l"IC/m"IQ(q"IX(r"I_(s"If/t"It(w"I{=x"J96y"JN(z"JU6_X;fb"Jj`c"KK/d"KYLe"L&(f"L-(g"L4/h"LBDj"LeEk"M+Dl"MN>m"Mk/n"My6p"N0(q"N7=r"NS(s"NZSt"O.=w"OJ=x"Of/y"OtZz"POS_}ffb"Q#=c"Q?/d"QM=e"Qi/f"Qw6g"R.(h"Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_!-_--_]-_Q-_9-_E-
|
||||
@@ -0,0 +1 @@
|
||||
_?.F*b!(_@Gu*j((_=j5*_AU)*w/(z6(x=(_;so5dD&oI&sN+zX&d](_:-ARgd(lk(_::r>ir+_A{X*m|(z"%(_@x&'e",&n"1&r"6&_A+X*b";(_0F^4h"B(_08F4_Ac>'d"I+l"S&s"X&t"]&_;?S*_7BsHs"b(_=X84s"i(_B/s'd"p&h"u'z"{'_4qR4b##(g#*(_A>[*_A?"*_6sf*k#1(a#8'e#>'t#D'_.E$4_8RD*_7Cv*_,(@*m#J'n#P.o#]'_8%-*_B1$*c#c(_@XO*s#j(_3>rEe#q'l#w'n#}'r$%(_@Fx*_4)?>z$,(d$3'e$9(_$-("&b$@(d$G(h$N(r$U(s$\(y$c(_++UR_2b1Ha$j(f$q(n$x'u$~(_A?+*_:;1*_A{a>_6VD\s%'(_@"g*j%.(_A|)*g%5(_?Au4_@GY*_@XX4_B/y>s%<(t%C(_BV)*_?ph4_9c4*l%J(s%Q(_A,3*_@3_4e%X(s%_(_>FX4t%f(_&W]>d%m(f%t(g%{(r&$(_A+jHk&+(_B08*_Bg5'b&29c&J'f&P-j&\'k&b'm&h-n&t's&z9t'43w'F-_@47Hs'R(t'Y(_83:Hs'`(_?`Z>s'g(_>yJ*e'n'n't-s("'_BC7*_5lx*d(((_3/!>i(/.n(<'_%kY*r(B(_@x2>j(I(_>Fk*_?.O*_7C<Hj(P(_>'J*_?Ao'e(W'h(]'l(c'_A{~*_44K4_;@$4_#<]8b(i'l(o-n({.s)*'q)0(y)7(_+gzRn)>'s)D(_88I4b)K(d)R(t)Y(_%+e*d)`(b)g'_BC@*_?a,*_+I!4s)m(y)t(_7kr._44^*x){(_@ho*b*$'m**'_@4g4_BC.*_B0f*_B0A4d*0(n*7'_BVV4_%&O4_(}q*i*=.o*J-e*V'i*\3o*n'u*t-h+"3i+4(a+;:e+TFi+y4o,.-u,:'_8hS'r,@Ru,q:a-,-e-84u-K'a-Q-e-].o-j'u-p4i.%@u.D(a.K'e.Q9o.i'a.o:e/*4i/=^u/z'v0"4a05:e0N'i0T3o0f-u0r(a0y'i1!.v1.(a15'i1;.i1HFe1m'o1s'a1y'e2!'h2'9i2?:a2X.e2e.o2r'u2x.a3''e3--o39(u3@.i3M:a3f4e3y(i4".o4/(u464e4I'h4O9i4g.o4t'h4z(_AcD*_Bg;4_A,<*_8E*4_8hY*a5#.c50'e56-g5B'l5H'm5N'n5T4t5g'y5m'_A=Z>h5s(s5z(y6#(_A{O*d6*(_;?\4_AcM*_'Q-*r61(_A{3*_@hx*_@G#>_BVi*s68(_Bg{*f6?(_8`>'d6F's6L'y6R-z6^'_<7E*_>8.*_>j|'b6d'l6j'n6p's6v'_A>R*_:rL>q6|(_:.:4_BBj*_5LmRh7%(z7,(_B0T*i73'_<#b*f79(_BBa*_,H{Eb7@-d7L'f7R'g7X-i7d4j7w'k7}'m8%-n81.p8>'s8D-w8P'_#S]Rb8V(h8](l8d(r8k(s8r(w8y(y9"(_:ri>p9)(q90(_B1-*i97:t9P'_4%Z*p9V(t9](x9d(_=N0Hn9k(_'gZH_&<r.a9r'b9x'd9~'e:&'k:,'m:2'n:8's:>-u:J'y:P'_BV2*n:V(_?.)>s:](x:d(_>yS>_61:Ht:k(_@3r>k:r(n:y'_<}I>k;!(s;((y;/(_44g*_A=w*_.E7"&b;6(d;=(g;D(j;K(k;R(m;Y(t;`(_<7NRs;g(b;n'h;t'n;z.o<):s<B't<H'_@Xk>_4%Q*_@"$Hs<N(_;gm4_@41'g<U(n<\4o<o'_;I+*d<u(_70L*q<|(x=%(_;UN>h=,(i=3.n=@.s=M(x=T(_8;vH_@G@'b=['n=a'_>[o*_@4z*_>k$>d=g(_9CT4z=n(z=u(_<UA\_B0]*l=|(_?-q'e>%'h>+-l>7'_>[f*l>=(q>D(_9=v*_AU24_@x,'i>K(n>R:a>k-e>w'i>}4u?2.z??(a?F3h?X3u?j'_<o!*a?pFe@7@i@VFo@{'uA#:_1_>*iA<(_A?4*aAC.eAP-uA\4_$MN:aAo'eAu.gB$-nB0'qB6'rB<'sBB-uBN3yB`'zBf'_@i#*aBl9eC&4oC9'uC?3eCQ'gCW'_@5T*iC]RuD0:_B0o4aDI-eDU.oDb'_@hf*aDh4eD{:iE6XoEm'uEs4vF(4aF;4eFN'iFT4kFg(oFn.aF{:eG6'iG<:aGU-eGa'iGg'iGmRuH@.aHM'eHS'uHY'_8yN*aH_-eHk(hHr9uI,4aI?-eIK-iIW3oIi'uIo-oI{-eJ)-oJ5(uJ<-iJHFuJm._>[x4aJz4iK/.oK<'uKB:aK['hKa?iL!4uL4'nL:(oLA4aLT3eLf'iLl(oLs'uLy-aM''aM-'eM3:iML:uMe-rMqReND'uNJ-aNV'eN\(uNc'iNi-aNu'eN{-oO)'aO/.iO<LuOg'aOm4eP"-iP..oP;'uPA'aPG'iPM-uPY'aP_-iPk.aPx'uP~'aQ&9hQ>-iQJFaQo'eQu.iR$'oR*'uR04aRC'eRI'iRO-eR[(oRb'uRh-hRt-iS"(uS)'kS/'qS5'_<#q4sS;(_:-r4_BgN*aSB'_BV;*_@X2>_8hM'_;I4*lSH(xSO(_BgW*_>87*dSV(mS](zSd(sSk(_9Tx>_;?o4_28C4lSr(zSy(_3/Q>eT"-lT.'mT4'tT:'zT@'_+[4*cTF(yTM(zTT(_A>">sT[(_A{<4hTb(_@5%4_@Y**cTi(gTp(jTw(_=j>4_@Gb4tT~(_*l}4sU'(_A>d*hU.(sU5(_.F<4_A?=*_BBs*sU<(iUC'yUI(dUP'iUV-jUb(mUi'nUo'_?S2*jUu(_?.X*_;Uk\_<o*1nU|-_>G<*eV*'iV0'uV6'_6lY'bV<'dVB-kVN'lVT-mV`'pVf'tVl'wVr'mVx(_,hqRbW!(jW((_8RMpkW/(mW6(_1wvRdW=(lWD(_)dJ*dWK(yWR(lWY(_>F}>dW`(_:j"\nWg(qWn(xWu(_8,U'eW|'_<U|4_@5A4_=CK*_:Sf*cX$(lX+(_:&.1iX2-kX>'pXD(sXK(_<}@*_?-w1lXR'dXX(kX_'_:BT4_A+a*mXe(_A>?4sXl(_AT~*_;I=4_70%HjXs(oXz._@Y3*pY)(_<cw1eY0'nY6'_@"K*iY<'sYB(_6cq*mYI(wYP(wYW(_@4^*rY^(_@Y<*_48x4pYe(_:.'4eYl3uY~'lZ&(_?`w4sZ-(_A{O*_>Ft*_>'S>_AUE*_<#k'kZ4'yZ:'_@"T4_BB|1bZ@'_$DE*wZF(_,L`'nZM'qZS(_BVD*_)B<'uZZ-_Bgr*_@58*tZf(wZm'_<V1*_A>m4zZs(_@GF4tZz(z[#(n[*'_$Y9>d[0(_BVM*m[7(d[>(j[E(a[L'u[R't[X'x[^'_Bg`*s[dLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
_2%R-_'3X-_)PX-_4tO-_4B.-a!&j&&h+&i0(h7&_&~7-_1`l-_)sP:e<&sA&_.bZ-_+dj-sF&gK&aP&_'rL-_0|?:iU&uZ-uf&ik(ur(_+.]-_2p;-uy(a""&h"'&_+VF-_$bw-_2pM-n",'n"2'e"8(a"?(_3@B'a"F(f"M'_0|d-_,O.-r"S(a"Z'g"`._3m>*_.'6:a"m'_/eo'_2pY-_2ou-_+}K-_/5w-_+.iG_"I:-_,OG-_,.g-g"s(_)jw'_'JO-_'3d-_2K?-_'Ng-_2$U:_0&U-_4B"-_)@\-_+I)-_%SE-_0&g-_2%^-_3mw-_*nK-_*!'-a"z(e##'i#)(o#0'i#6(a#=(u#D'i#J-a#V.o#c(u#j(u#q'a#w'h#}'i$%'u$+'a$1'e$7.u$D-a$P(e$W'_*3a-_,].-_%@,-_3n%-r$](g$d't$j'i$p(_.b5-_.{U.l$w'g$}'_0E6-_4t$-_(kV-r%%(a%,'u%2'u%8(a%?(i%F(_0&a't%M'i%S(_/5_-_0|X-g%Z(_$L!-_1`x-_-Mn-_0_R:_2$n-a%a'_1>--_#X>-_/M!-u%g(a%n._+I5Gg%{(_,O:.d&$'n&*'w&0'i&6'a&<'d&B'h&H't&N-l&Z's&`'i&f(o&m-u&y'_%AI'_$:)'h'!'i''(o'.(_4tB.h'5'l';'m'A'n'G'r'M'_.L}'n'S's'Y'n'_'u'e(o'l(_5SX.d's'f'y'h(!'l('-m(3's(9'w(?'_(]8'd(E'e(K'l(Q'n(W'o(](_*=M.e(d'z(j'o(p?m)0'o)6._+#?'h)C'n)I'_#k8'a)O(i)V(_"2a'a)]:n)v(u)}(z*&'_2%F'n*,(f*3'm*9's*?-t*K'u*Q(_1>!'n*X(o*_'t*e'_)Xp.i*k-t*w'_1>''a*}'b+%'k++'n+1.s+>-u+J(w+Q'x+W'y+]'n+c(_+dv'e+j's+p'_(>J5i+v'l+|'s,$'i,*.a,7'e,='n,C4n,V's,\-_&!D'n,h(_5Se'a,o'_'rF'n,u'_.{n'd,{'_)j}5a-#'e-)(n-04u-C(x-J'n-P(n-W'k-]'n-c.a-p'e-v'i-|(o.%'_-9S.j.+'k.1't.7-_2J~'n.C(_'gw'n.J'n.P'_0_3'o.V.n.c(i.j'n.p._5Sk'_2pG'j.}'_$fb'a/%'b/+'n/1._#|1'n/>(y/E'_0_-'_+VR'n/K-_$v;'_(rU.a/W'e/]'n/c'e/i.i/v'o/|'u0$(_$1?5b0+'u01(_*=Z-_4Ab'x08'h0>'l0D'm0J'e0P(u0W'i0]'_-M\'i0c(u0j'a0p'a0v'_.bA:_)PL-_&yW-_&yK-_0Et-_2$z-_3@l-e0|(h1%-a11(e18'u1>(a1E(a1L(s1S'u1Y._4t[-_.L_-_/5S-n1f'_2%(-o1l@u2-(i24'a2:'e2@(o2G'_3mS'm2M'y2S'i2Y(e2`(i2g(u2n'_(]2'r2t'e2z'h3"'i3('e3.'_(:E-_(:,:_-9`-_#FJ-_0}$-_(LB-_${\-_4u!-_-Mb-_0_''g34'n3:'p3@'a3F'_%_O-_&\c-_5U_-_3mY-n3L4a3_'i3e'k3k'a3q(a3x(g4!'h4''i4--s49'a4?(_2q%-_%`j:_2%4-_'3L-_-q'-g4F'_$a--_,zw-_)t#-_2q1-_3@`-_3@x-_${h-_3@H-_0^y-_-`Y-_4uK-a4L(u4S._1=y'n4`'_.b/'b4f'h4l'y4r'h4x'a4~'_3@T-_2p#-_#SJ'i5&(w5-'a53'_1a&-_4u]-_3n=-_+}?-_0EB.s59'_2%@'g5?4_2pe-_3A2-a5R(g5Y(_0_9-_-py-_3A&-_/eu-r5`.a5m(e5t(i5{(_0|p-_/6%-_.Lk'_"E}5j6$'w6*'x60'n66.o6C(i6J(_2K9'a6Q'n6W'_)@h.j6]'_$S)-i6c'n6i'o6o-a6{4e70'u764n7I(_&ib.l7P'm7V'n7\4o7o4r8$'_5Sq5l8*9s8B't8H'z8N'_'`x'l8T'n8Z's8`'x8f'y8l'n8r'_-)h.c8x'n8~(o9'(_4t<'_)k3'n9..i9;'n9A4_#>p.s9T'x9Z'n9`'_2K&.l9f'e9l'u9r'a9x'i9~(a:''h:--i:9(a:@'i:F-o:R(a:Y'a:_'i:e(l:l'n:r(o:y(_(>^5e;"'i;((n;/'a;5.i;B4n;U'l;['e;a(_#kWCa;h@e<)(h<0'n<6.s<C'x<I'y<O'_&/C'a<U'l<['n<a'l<g'n<m'_4B:'l<s'u<y(_'J['n="(o=)'_&76'i=/(s=6'w=<'_#.y5a=B'f=H'g=N'h=T'm=Z'n=`'s=f'u=l(n=s'_"Y3'n=y(s>"'_2pw'd>('s>.'_&B9'l>4'n>:(n>A._2K3'a>N'n>T._2%j-_#K%'u>a'_"{-5b>g'k>m'n>s(i>z(_+/1'n?#'u?)(y?0'i?6Eo?Z(i?a4n?t'_"v5<a?z'e@"'n@(-q@4'u@:(y@A'z@G'_5T3'a@M(n@T4n@g(o@n(i@u.lA$'_'w&'aA*4eA=.iAJ4uA]:_2pq'aAv'oA|'iB$(nB+.nB8'wB>'dBD'gBJ'sBP'uBV(oB]'sBc-dBo'sBu-iC#(nC*(_2%L'tC1'zC7'_$`iCaC=4eCP(nCW4rCj'xCp'_3AJ'fCv'_'YJ'nC|.oD+'_&ly.nD1'uD7(_'Fb<aD>'eDD(xDK'nDQ'aDW'eD].iDj.oDw'uD}4_#<C5sE2'wE8'oE>(_4uE'_*=f'dEE'jEK'mEQ'nEW(oE^(nEe-_0||'lEq'eEw'sE}'oF%(lF,'_0_E.hF2'sF8-xFD'_'g}'cFJ'lFP'pFV'oF\.wFi'_5Uk'dFo'jFu'lF{-mG)'sG/'tG5'yG;'sGA'oGG'sGM'nGS-_2p}'iG_(aGf'nGl(nGs'lGy'mH!'uH'(_-)u'nH.:_.|".aHG-fHS'lHY'nH_:sHx'yH~'nI&-_4uW'eI2'nI8.iIE.nIR4_$]C'aIe-tIq'lIw'oI}(eJ&-yJ2'oJ8-nJD'tJJ'_(rb'nJP'nJV(iJ]'gJc'iJi-nJu'sJ{'aK#-iK/._5Uq'dK<-kKH'lKN'mKT3tKf-oKr-_5Uw'eK~'pL&'uL,'_&\o'bL2-oL>(nLE'iLK-aLW'nL]._%jV'uLj(aLq'nLw.aM&'oM,'_/M-'wM2'eM8(iM?(_5T'-nMF._/eu-_4B@-_0'!-_.M1-_5T9-_,OS-_5TQ-_5TE-lMS'mMY'aM_'eMe'aMk'iMq(_+d|-_5T]-_4tg-_)PL-_/5k-_5Ti-_5Tu-_,O_-_5U#-_*x^-_5U;-_5U/-_*XF:sMx'_'`l-eM~(bN''lN-'_)su-uN3(dN:'_&#u-nN@'sNF'nNL(mNLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
n!(i((i/(_&|E4o6&r;(iB(iI(mP&nU&nZ&_)'Q*l_+oi-_&|X*_)'Q*_)'Z4zu&az&g"!-g"-(_&|a*_)@~*_)L^*u"4(_)Y@4i";&_(`a'n"@&s"E&_'dK'_)a:*i"J2_)YS*t"[&_)hx*_'T>*l"`'e"f'n"l._(YU4t"y'_)aC*_)Y\*o#!(s#('a#.'t#4'o#:(i#A._)10*i#N(i#U(o#\(_):%*n#c(_)'m*s#j'i#p(_&|X*i#w.s$&'_)'v*n$,.o$9(_&=7*_)RQ*_)5q*i$@'_)aL*_'rh'i$F(_&=7*_)Ye*i$M'_'(,'e$S(i$Z(a$a.e$n'n$t(a${'u%#(a%*'e%0(u%7'h%='_)q['n%C'u%I(n%P'e%V'_%ou'_%~x'u%\'i%b(e%i'g%o(e%v'g%|3h&0'g&6(_(Fd'_'DJ'u&='u&C'u&I(a&P'i&V(i&](i&d(e&k-u&w'r&}(u'&'g',._'],'r'9(i'@(_Xv'h'G'r'M'x'S'z'Y'a'_'_#I>5z'e'u'k'g'q'_(kE'_)Rc'_):I'a'w'n'}'o(%(_'z%'_)6,'h(,'_'3x'a(2'a(8'e(>'i(D(e(K(_&zh'_(C3's(R'u(X'l(^-t(j'e(p(n(w(u(~'e)&._)AG'u)3'h)9'i)?(_)AA'e)F'i)L'a)R(_'Mg.t)Y'i)_(t)f'a)l(h)s'_&%*.g)y'n*!'r*'(_&gW'g*.(r*5'e*;'e*A'h*G'_)iY'o*M(g*T(a*['n*a'_'TG'_(8`'g*g.h*t'_$lo'u*z'_&5v'g+"(e+)(_(w`'k+0'n+6-n+B._%o!'u+O'i+U'u+[(e+b(u+i'_'ID'a+o(g+v(_)Lp'a+}'_(`g'a,%'_)Fl's,+'i,1'o,7.a,D'_#hm'j,J'_)Fr'a,P(h,W's,]'n,c(y,j'g,p._$vz'n,}'x-%'n-+'_)ap'i-1'_)A;'i-7(i->(a-E'e-K'_'7@*o-Q(d-X'_)A)*o-^(n-e(s-l'_(U!*e-r'i-x(_(%D*f.!'_)aU*_(),*_(QH*e.''_&Rm*h.-'a.3(_"Nu*h.:-r.F'w.L'y.R'_)"1*n.X't.^'_)a^*n.d'a.j'e.p'_)i#*_)ag*_)Fc*t.v'e.|'i/$(a/+'j/1'i/7(e/>.a/K(o/R(i/Y(_)5z1d/`'q/f'b/l'q/r'e/x'_)i,*_(>o*a/~(a0''d0-'t03'h09'_)Yn*s0?'_)":*_(sd*n0E(i0L(u0S(a0Z'u0`'a0f(i0m(_'MT4a0t'g0z'u1"(_'wo.h1)-s15-_'yq*_(wZ'_({v*h1A'_):.*_'5T4_):7*i1G'e1M'i1S'_'7I'g1Y-_'b_._)av'n1e(g1l'i1r'g1x'g1~(e2''r2-(_&hK'n24's2:'n2@'_&T%'a2F'n2L(_)b$'v2S'a2Y'_%I7.i2_'w2e'_$w<.e2k'q2q'e2w'a2}-e3+'i31.u3>4e3Q'e3W(h3^'i3d.g3q4i4&.u43(o4:'g4@:h4Y'_%2"'_(kK'_)Lv'g4_.p4l'_&x,'g4r.s5!'i5'(i5.(g55(a5<(l5C'i5I.k5V'_'=m'n5\(a5c'o5i'_&]4'n5o'd5u'l5{'_&nB'n6#'n6)'_(>x'a6/(_(Yh'_&"n.r66(_(3R'g6=._%7p.n6J'_"N[.d6P's6V'q6\'i6b(_)Lg*_&bS.f6i'l6o-n6{Eo7A(_&Ys'u7H'_)R|'g7N4u7a'i7g'a7m'n7s(e7z'w8"'a8((g8/.e8<'_)Fx'_)(!'f8B'_(;p'i8H(o8O(n8V(e8]'a8c'u8i'a8o'g8u(h8|'_'TM'g9$(_)a|'h9+-i97'e9=(a9D'_'|D'_$x}5g9J(n9Q._&:>'g9^-k9j'u9p'e9v'_%Sv'_%2('g9|._&v,'a:+(_RX'b:2-d:>'h:D'l:J'z:P'_(;j'_&U,'l:V'x:\'g:b(n:i'l:o'g:u.w;$'i;*(_)i_'i;1(h;8'n;>")_$QB.s<F'w<L'_)Ri._)"C'_(wf'm<R'i<X(_%Hh'n<_:o<x(_&7E'n=!:_#J*Cx=:'z=@'_(+e.i=F(n=M4o=`(n=g(z=n'_'w|._(kQ5g=t(g={(e>$'u>*(u>1'h>7'_'X6'w>='h>C'u>I'e>O(h>V'i>\(_"ck._%+7'i>c'h>i'_)qa'n>o.o>|._%Po'_#xf'g?+'x?1'i?7(i?>'e?D'_(wl'g?J4q?]'g?c4_)b*'n?v(_)qg'i?}-g@+(o@2-_$ee'n@>(_#:*5r@E'n@K'_$H9'a@Q'o@W(e@^(e@e'_)Rv'a@k'i@q'a@w(_)(''_(3X'h@~'sA&'iA,'rA2(iA9(_(]D'iA@.eAM(aAT.iAa(iAh'hAn'iAt.uB#(_(wr'mB*'eB0'eB6(iB='iBC'uBI'eBO'hBU'eB[(uBb(iBi'wBo'iBu4gC*(qC1'_%A\'nC7(_)AM'gC>(aCE'aCK(_(5u'_(|3'dCR'jCX'zC^'nCd.oCq'uCw(iC~(_)qm'bD''pD--uD9'aD?.aDL(bDS'zDY'rD_(_$uv'wDf'_),U'dDl'_"Mq'bDr'dDx-nE&.oE3.eE@'iEF'_&(a'jEL'rER(aEY(fE`'mEf'gEl'eEr'gEx'_&x2'nE~'eF&(lF-'tF3'gF9(uF@(lFG'nFM(_(>~'tFT'aFZ(iFa'aFg.uFt(aF{.iG*(oG1(eG8(iG?'jGE'sGK'rGQ(uGX(jG_'aGe'uGk'_&B2'gGq(eGx'hG~'nH&._)S$'gH3(_'5g'nH:(_$>1'hHA'nHG(uHN(eHU'_)i5*_'yz*_)Yw'lH['aHa'eHg'oHm.iHz(iI#(_(M=*iI*(_(k<*aI1'uI7'_(2!*iI=(aID.oIQ'_(+_'aIW.iId'_(of*_)A2*nIj(_(2**_)i>*kIq'oIw(lI~'lJ&'nJ,'nJ2'_)iG*uJ8(iJ?(mJF'_)Y}*sJL'_):@*iJR'_(|!*jJX'iJ^'oJd(aJk'eJq'uJw'qJ}'_)RZ*_(|**_)iP*uK%(nK,(nK3'eK9(tK@'iKF'_&|a*aKL'uKR'_&Yy'bKX'eK^'lKd'nKj'wKp'yKv'zK|'aL$'_$|J'sL*'_)AS.fL0'qL6'zL<'oLB(uLI'gLO(nLV(aL](eLd(aLk(_):h'gLr(nLy'nM!'_%;$.bM''_#La<bM-'_(`m'hM3'_'~G.iM9'vM?(_)"I'jMF'_%\{.xML'eMR'gMX(uM_'nMe(oMl(rMs'gMy(iN"'gN(._),['nN5._&~.'_&HC'_)62'iNB'aNH'oNN(aNU'hN['iNa'_)F~.gNg.tNt'_&hQ'gNz(wO#'uO)'_'TS'aO/(aO6(_(oo'gO=(_#[='dOD'jOJLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
_+R7*_,x;*_(m6*u!(_)uR*_(m6*_(m6*a((g/(g6(a=(eD&_&Cs*hI&iN(bU&_-SP'zZ&_+R@'_,L-*d_&ad(ik(_-rR*sr&tw&e|(e"%&r"*(_,BS*s"1&e"6(_-aR*i"=(n"D(e"K(_-r[*_)+x*s"R&_,bP*_,bP*_-SV*_,*W*u"W&_+CQ*_-a[*j"\&u"a&_#Y&*r"f&_-EZ*n"k&_)I3*d"p'_+r4*_+6J*_-88*z"v'r"|(_)29'n#%(_-Sq*s#,'_+1!*o#2'i#8'g#>'_*3>'r#D'z#J'a#P._-'Q*n#]'_,*i'n#c(b#j'd#p'h#v'e#|'_.';'n$$(s$+'_,xW*n$1:_-s!*_,xD4_,Be*i$J'n$P(n$W._'FG*n$d(_.:B'j$k'_+r+*_+x2*u$q'e$w'i$}'h%%3i%7.h%D'a%J(j%Q'i%W'g%](_-8)'e%d'n%j'n%p(n%w(_.'J*_-av*h%~'o&&(a&-(i&4(e&;(_+RF*_'xs5l&B'_+r"*s&H-o&T(e&['_)XW>n&a(n&h(_-b**e&o(_-'H*i&v(_-b!*i&}(u'&'z','_*H>*_*aP'u'2'n'8'n'>(e'E'_-s3'_&Hf'n'K(g'R(_"!w.d'Y'a'_'n'e(_,bb'_-s**e'l(g's.i("'_*XD.g(('a(.'m(4'_,LQ*_*tB*o(:(_-8/*_)q).o(A(n(H'i(N(w(U'_%Tq'h(['o(a(u(h'_,LH*u(n'i(t'_)'s'u(z'_(ig'f)"'g)((i)/'g)5.n)B'_,L6*_-Ec*o)H.i)U(_-&p*e)\(_*?|*_-S_*i)c(n)j(_,"n*u)q(z)x'e)~(_-rd*a*''e*-(e*4'e*:'u*@(g*G(e*N(g*U(n*\(s*c'u*i(n*p(_-&y*n*w4i+,'_-ad*_-'$*n+2'_-El*_,*`*_*l&*e+8(i+?'a+E(u+L(x+S'_-7~*n+Y(u+`'u+f'e+l'u+r'_,4;*_,B\*_'ip*n+x(e,!(_-am*_*];*n,((o,/'_*gl*e,5(u,<'e,B'u,H'e,N(n,U'n,['n,a'd,g'z,m'_$Xw5b,s'u,y'a-!'_&JN'r-'(_(\M*g-.(h-5'c-;'n-A'_);L'e-G4n-Z(a-a'u-g'r-m(u-t'n-z(b.#'i.)(i.0(_-Sz*e.7(_(wo*o.>(s.E'n.K(_,;=*e.R'_'Kt4e.X'_"ni'm.^'t.d'_)'y*s.j'_-'Z*n.p'_)I<.l.v'n.|-z/*'e/0'_$j<<b/6'u/<(_*aV'r/C'h/I'_*DP*_-T%*_(=,'_%q5*u/O(_$N/'d/V'e/\(_&y0.n/c(u/j4g/}(i0&'a0,(g03(g0:(_-b3*_,bh*_)Xt's0A'g0G'a0M'h0S'u0Y(_,bY*e0`'a0f.u0s'_l|Cd0y'g1!'q1''s1-'z13'_)Xz'a19(_"w}'d1@'x1F'a1L'a1R'n1X(_')p'y1_'a1e'_*@'*_('#'s1k'i1q'e1w'_+av*_,Wd*_+$8.n1}'n2%(i2,(n23(_,x`'u2:'_'rT'a2@'i2F(p2M'_+i=*o2S'_)8|'_+b!'y2Y'a2_'z2e'e2k(z2r'n2x(_$[2'h3!'_,n8*i3''u3-'e33(a3:'e3@(a3G'i3M(u3T'_+*U'm3Z'u3`'_$_T.s3f'a3l'_-'c*_-'l*o3r'_9t'b3x-c4&'d4,-f48'g4>3h4P'j4V-k4b'l4h'm4n'q4t's4z't5"'w5(-x54'y5:'h5@-u5L'i5R(_,xf*_'9/.g5Y(s5`'y5f'_.'S'_'{h.g5l(l5s'z5y'i6!'h6''_(1&._*;}'c6-'s63'_%w^'_%L9.i69(_&&3'_,Bn'i6@'_*tK*a6F'u6L(a6S'e6Y'o6_'_*pK*i6e(_)@X*a6l'i6r(_'<e<g6y(_'oj'h7"'y7('i7.'_+RO*a74'n7:'_&UM's7@'x7F'i7L'_)II.x7R'z7X'_*&@.a7^'n7d(_&&-'_5B'g7k'_'y).u7q'g7w(n7~'_.:H'_-8A*n8&(i8-'a83'_&>a*a89'h8?'n8E(_-'u*_-'~*_.:N*y8L'_+[4*_+1**i8R(_-T.*u8Y(e8`(_"hd*r8g'_-()*u8m(i8t(_-b<*a8{(a9$'o9*'i90'i96(_-(2*_+iF*b9='e9C'_)/B*d9I't9O-_-s9'i9[(_(wx'_-F)'n9b(_)q6*u9i'i9o'h9u'_-8J*t9{'e:#'_'d|*_+iO*a:)'a:/'i:54o:H'_,bw*b:N'_-bE*a:T'h:Z'_,Wm*u:`'i:f'a:l'a:r'i:x'_,bq'j:~'_%T/'w;&'l;,'e;2(i;9'_&rR*_+[=*e;?'a;E'b;K'l;Q'h;W'a;](_+RX*u;d'i;j(_(rJ'_-8S*i;q(_*@0'i;x(_-bN*n<!'_&*+*j<''_)69*_,Wv*n<-(_,Wv*_,Wv*_**A*n<4'i<:(h<A'_,xo*_-()*i<G'n<M'p<S'_,xx'r<Y'u<_'_',%.g<e(_.'Y'_)cK.u<l'_(A2'_&/e'i<r(e<y'o=!.i=.(_-'6*s=5'_-Sh*_-'-*_-rm*i=;'o=A(_+am*_%/!*d=H'n=N'_+x)*i=T'a=Z'_+qw*a=`'_-E~*a=f(i=m'a=s(g=z(_-'?*_)Q/*a>#(i>*(n>1(i>8'w>>'_,;4*o>D.i>Q(o>X(i>_'_,L?*_-rv*g>e(_.'2*u>l'a>r'o>x(o?!'a?''n?-(i?4.i?A'a?G'u?M(h?T'm?Z'h?`'u?f(i?m(i?t(_,y2'n?{(_(=2'_+b'*_(G;*_&?F*_*a\*_,x~'g@$(g@+(u@2'a@8'u@>(n@E'_-(A*i@K'i@Q'i@W(_+Ra'o@^(_'Or'_(Rx'q@e'_*3D.t@k'_%J7'x@q'_-s?'j@w'm@}'nA%(_,Bt*iA,(aA3'yA9'_(A8'zA?'eAE(_,4D.aAL'oAR'_%2:*_-F/*_"k2'aAX'iA^'_&8k.uAd(hAk-iAw'nA}(iB&(_(_)*_-(;'_.'_*gB-(iB4'_$Wr5dB:-eBF'jBL'pBR'_&P45wBX'_+=+'iB^(_%74.nBe(_)Y"'gBl.hBy'hC!'_&XR'xC''_*<4'_.;2'nC-'nC3'_&EJ5dC9'gC?'nCE'uCK(_(Li'nCR'uCX'_%~,.bC^'_'M,.eCd'gCj(nCq.oC~'hD&'uD,'gD2(aD9'gD?(sDF'nDL(eDS'_,nb'eDY'nD_'_'/(*oDe'iDk'oDq'iDw'aD}'aE%'_,Lc.gE+(_(im'dE2'_)(1.bE8-dED'lEJ'sEP'zEV'iE\'bEb'jEh'_*]D'eEn'gEt4_)%<'nF)._'m5'iF6'_%m7'sF<'_*p]'fFB'sFH'_'Ic'uFN'eFT(iF['gFa'_*R}'_#yB<hFg'iFm(jFt'Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_-{Z*_'G+*_)4-*_,!5*_(u+-i!(a(&_)dm-i-(u4(e;(_-{c*_*%Q-iB(eI(_,R>-iP(_(]D-hW&_&8s-_)#P-_,/X*_*,--h\&oa(ih&om(et&gy-e"'(h".&_,!G*_(dF*h"3&h"8&s"=&b"B&o"G&h"L&_&qK*z"Q&g"V(_.;#*a"]&u"b&u"g(n"n'_+Af*i"t(_#B@*d"{'g##'r#)'s#/'_+rM*_';L*d#5'_,/m*i#;'a#A'n#G'n#M(e#T(i#['u#a'_-{l*d#g-e#s(_-1~*u#z'h$"'_(&m'n$('g$.(_*<D*_+W]*a$5'_+rV*_-br*_+dF*_*ZN*i$;(e$B'o$H'_,?z*g$N'_,Rt*_&oz*_+Ao*_-I"*_-2)*a$T'i$Z(z$a'g$g'_-b{*n$m'_(dF*_&]$'e$s(i$z(_*40*_-{u*_&n$.l%#'y%)'t%/'i%5'o%;(_+#]*_(a.*g%B(_+Wf*u%I(o%P'_&w'*e%V'o%\'t%b'e%h'e%n'_#41.a%t'_,!P'b%z'g&"-_,Rk*s&.'_-1u*_'Dd-_,RJ-_+,a*_,RV-h&4'_*y--i&:(_,/a-n&A(n&H(_%e}-_-bB*_'1U-_*,9*_,?q*h&O'_'Pn-_,Rb*_(Zz*k&U'm&['a&a(i&h(_-bK*u&o(_((i-_*Sc-i&v'_)/t*n&|(o'%(n',(o'3(_-bT*_+L_*_*ch*u':(_-b]*o'A(n'H(o'O(_)o<-g'V'w'\'x'b'i'h'h'n'u't'b'z'o("'_'Y;*_,@%.i(((h(/'g(5(_*ZW*h(<'s(B'_)9e*n(H'g(N'_&TE*a(T'_-22*a(Z'_+#f*_-{~*_(IF4_)?'4i(`(_'RP*n(g's(m'e(s'u(y'h)!'g)'(i).'i)4.u)A'h)G'n)M'i)S'_*Z`*i)Y(o)`'_)?:*e)f(_-I+*_,i6'_&,u'k)m't)s'_-c/'n)y'_,/v*_(-K'_%'E'e*!(h*('x*.'e*4'_-|)*i*:(_,R}*h*A'o*G'e*M(a*T'i*Z'h*`'h*f'_(1/*e*l(u*s'n*y(n+"(_-|2*e+)(n+0'h+6'q+<'n+B'x+H'_,{9*_#j1*_'Dp*o+N(n+U(_%L,*i+\'d+b'a+h'o+n'h+t'_+Wo*h+z'_-c&*e,"(a,)'s,/'_.;,*o,5(_.;5*i,<(_,{B*x,C'a,I'o,O(h,V'n,\'u,b(a,i'u,o4u-$'a-*'e-0(a-7(a->'o-D'u-J'u-P'i-V'u-\(o-c'e-i'e-o'u-u(h-|-a.*'a.0'e.6'i.<-i.H-e.T'i.Z'y.`'_*Zi*_#lj.h.f'a.l'_&n1'i.r'h.x'n.~'i/&'h/,'h/2'_(u7*p/8'd/>'_-|;*n/D(n/K'j/Q'_(6&*n/W'_+r_*_#*5Ju/]'u/c'a/i'n/o.p/|'h0$'i0*'u00(i07'h0='n0C'_,S(*u0I-o0U'_"9u'g0[3_)Dm*b0m'o0s(i0z'a1"'_-I4*a1('_+dO*_+#o*_-I=*e1.'_+8O*_-2;*_-|M*n14'f1:'k1@'_-|V*a1F'i1L(i1S'a1Y(e1`(_-|D*_)#\*o1g(n1n'i1t(e1{'r2#(s2*'s20'_)oH*k26'y2<'k2B'a2H'o2N(i2U(l2\'n2b'n2h'x2n'q2t'i2z'u3"'a3((_*iI*n3/(i36(k3='o3C(a3J(a3Q(_,SL*o3X(_,{K*_,{T*_*iR*g3_(i3f'_&-k*g3l(_(m!*i3s(n3z'g4"'i4('s4.'i44(_'Wh'i4;'_+dX*i4A(_,Rk*s4H'_-1u*i4N(j4U'_,!>*u4['g4a'd4g'o4m(n4t'_*y9-n4z(_,{--_)`34_-bf-_(B3-_)9\*n5#'e5)'_,Rk*s5/'_-1u*_+8F*a55'_)`F*o5;(o5B(_)ul*s5I'n5O(_*i[*_(IY*a5V'a5\'n5b(_-IF*i5i'a5o(a5v'_-IO*_(q<*_+Ax*_$`|*_&p.'_%Fp'd5|'i6$'_-2D*g6*(l61'a67'_,iE*_-2_*i6=(a6D(i6K'i6Q'o6W(_&'x*_*Z{*k6^'a6d(h6k'_*49*n6q(f6x'o6~(a7''_-2M*a7-'e73'a79'_(=.*_.;>*_,SU'n7?'e7E(i7L(r7S(i7Z'a7`'u7f'_*cq*_-cG'_(=7'd7l'u7r'i7x'i7~'g8&'g8,.e89'a8?'g8E'_*<M'l8K'a8Q(a8X'r8^(_.;~'_+8X5f8e'e8k'e8q'n8w(_,!V'n8~(_$42'h9''_*JO'r9-(r94(i9;'s9A'e9G(n9N'a9T(i9['n9a'_$Ed.a9g'a9m'i9s4i:('v:.(h:5'h:;'n:A(i:H'i:N'n:T(_#>|'g:['l:a'_#i/.g:g4n:z'h;"'e;('o;.'a;4(_*[&*a;;'g;A'u;G'_$DM'i;M'g;S'i;Y'h;_3e;q'u;w'a;}'u<%'a<+'i<1'o<7'i<='h<C'n<I'n<O'_#yP'g<U.b<b'i<h'u<n'h<t-i="(_'[/.a=)'h=/'_*yE'h=5'_&X"*h=;'i=A(n=H'a=N'i=T(_'RY.u=['u=a'u=g'u=m(n=t(_#YPBc={'g>#.j>0'_%q(*_"b2<h>6'j><'m>B'n>H'o>N(a>U'n>[(o>b'j>h'm>n'n>t'n>z(n?#'o?)(u?0'a?6'e?<'n?B'n?H(_'mq'm?O'z?U'v?[(a?b'_(y3*n?h'e?n'u?t'e?z'i@"'m@('_&X+.s@.'_(X1'x@4'n@:(_';U.c@A'h@G's@M'_(PH*n@S(_-|z*h@Z'_";2.b@`'d@f'g@l'z@r'_*qX'o@x'_'/H'_+rq'_(u@'u@~(nA''oA-'gA3.mA@'nAF(nAM(_-2h'aAT(hA['_+#x*nAa'iAg'oAm'_*Ck*iAs'_.;u*nAy'eB!'iB'(_)UU'gB.'hB4'sB:'zB@'_*Ct'cBF'aBL'aBR(hBY-_+B,'gBe.hBr'aBx'aB~'eC&(iC-'eC3'iC9(oC@'_#P#CqCF'yCL'nCR'_)Z/'jCX'cC^'jCd'iCj'_)+e'eCp'_'-z.hCv'iC|(_*id*_+da'_"?`'dD%'eD+(_*4B.zD2'_)'3'aD8(hD?'eDE'iDK'dDQ'eDW'nD]'rDc(uDj'uDp'_'9u.iDv'eD|'iE$'iE*'iE0'uE6'uE<'iEB'eEH'uEN'aET'nEZ'aE`'aEf'yEl'_*im'gEr(yEy'wF!-oF-(_UI.eF4'jF:'rF@(gFG(iFN'iFT'iFZ'oF`'iFf'iFl'hFr'_%:}<dFx'qF~'sG&-zG2-oG>'uGD'iGJ'iGP'_)`O'zGV'aG\'uGb'aGh'uGn(_)+k'_-}%*uGu(_-2n*nG|'iH$(aH+(eH2(nH9(_*Cz*_,0!*nH@'nHF(uLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
_&a1-o!(_'4S-_#KD*_*VQ-_%Nx-_+\i-_)-p-a(&a-&_)-|*a2(_+\u*n9(_"#Z*d@&_+\~-oE&eJ&eO(hV&a[&n`&oe&ij(_*mJ*oq(nx(_):7*g"!(_+AQ-a"(&g"-&e"2&i"7(u">&n"C&q"H&s"M&_(iR*_#B~*s"R'y"X'e"^(i"e(_"og*n"l(u"s(g"z'_*,W*n#"(_'vw-n#)(n#0'o#6'n#<'_+A]*i#B(z#I'g#O(_,#>*_$W/*e#V(a#](a#d'j#j'_&S{-_+],*_(MW-n#p'l#v'w#|'a$$'t$*'n$0'n$6(a$='_we4d$C'i$I(o$P'_%s[-_"Q\-_%~w-i$V(o$]'e$c'_#{?-_+&(-_$p^*e$i(_*m5-_()`-_%yb*_(iI*_*V]-_+AH*_*Vi*_+AH*j$p'e$v'i$|'n%$'i%*.d%7'a%='k%C'_%vG*e%I'_*Vr'u%O(h%V'g%\(u%c'n%i(n%p'_)xb-g%v(i%}(n&&(a&-'a&3'_):@*a&9'_$K(*a&?'o&E'u&K(c&R'n&X'_(Mc*u&^'_,#}*u&d'i&j'g&p(_%2H*o&w'u&}'n'%'_)xn*e'+(h'2'_,#t*n'8'n'>'a'D'o'J'_,#G*n'P(_"Z^*_+&4*_%7C-g'W(i'^(i'e(p'l'i'r(_%=v*_$pg*n'y'u(!'o('(s(.'i(4(u(;(_)We*o(B(h(I'_,#P*_,#Y*i(O'h(U'_*mS*i([(g(b(_#ch*o(i'_(!/*d(o'm(u'o({'i)#(_,#b*_&lu4n)*(n)1'a)7'o)=(a)D-_#Ez*n)P'i)V(n)](_).'*e)d'i)j-o)v(n)}'n*%'n*+'s*1'n*7's*='n*C's*I'a*O'i*U(n*\(m*c'i*i'g*o(l*v'a*|'i+$(u++(a+2'_)HZ*g+8(i+?(r+F'i+L(n+S(n+Z(_+Af*g+a(e+h'i+n(a+u'_,#k*a+{'a,#'z,)'i,/'o,5's,;'_O`'l,A'z,G'u,M(_):I*m,T'n,Z(_Tt-n,a(g,h(u,o(e,v(o,}(_+Ao*n-&'_)Hc-_)gx-_&^(*a-,(_&xs*s-3'_+&F*i-9(i-@(e-G(a-N(e-U(n-\'_(Ml*_+&O*i-b(g-i(d-p'u-v'u-|(n.%'q.+'_)#C-_).0*_*,`*e.1(_'%+*_)#C-_*,i*_(3?*_&s~*a.8'_']c*_*me*g.>(s.E'n.K'i.Q(_%F~*_p]*_)HQ*i.X(_&FB-i._'i.e(d.l'e.r(_*mA*g.y(_')E:m/"'n/('i/.(o/5(_):.*_*mA*i/<(_*,{*n/C'n/I(_$ck*j/P'_,$O-n/V(i/]'j/c'_%?&*i/i'n/o'_&@$-_+B,-a/u'n/{(_&/A-e0$(_%)6-i0+'_*-/*u01(_&Lq*o08(n0?'n0E(n0L'g0R(_&J@*_%kW*_%-k*n0Y'n0_'n0e'e0k(a0r'y0x'n0~(l1''_&C0's1-'n13'n19'x1?'u1E(_'@U*i1L(_+&d*e1S'r1Y(n1`'_+]P*_)y+*a1f'_+&d*_+&d*a1l'i1r(_')g*g1y'_(!8*z2!'g2''i2-'i23(_$0U*a2:'n2@'a2F'_(aS*u2L(i2SX_)h/*n3,'a32'_):R*u38'i3>(_%Bv'e3E'f3K'g3Q(u3X(n3_'n3e'_':q*n3k(u3r'a3x(a4!'h4''f4-'e43(i4:(u4A(n4H.a4U'n4[(e4b(l4i'a4o'n4u'a4{'a5#'g5)(g50(_%yk't57'a5='n5C'a5I'e5O'u5U'_%fN*n5['u5a'i5g'u5m'_)Ho*g5s(n5z'_'iZ*a6"(a6)(i60(_*-A*_+BD*h67'_'4h.a6='i6C'a6I'i6O'i6U'i6['_$'B*o6a'_'4_*u6g(i6n'e6t'g6z(_$v%*g7#(_).9*y7*'n70(n77(g7>(_$v%*a7E'h7K'_&}X*n7Q(g7X'n7^'i7d(n7k'n7q'e7w'h7}'i8%'_(!A*h8+'e81(h88'_)Ww*a8>'u8D'a8J'z8P'h8V'h8\'_%Um*g8b(j8i'_')p'x8o'i8u(_"]p*_%b"*_%G)*a8|'g9$(x9+'m91'a97(g9>'n9D(_*W/*d9K'e9Q'h9W'i9](u9d'n9j._)#X*e9w'o9}'_&[1's:%'u:+'o:1'n:7(_(a\*n:>'l:D'_)h8*u:J'i:P'i:V(g:](i:d'u:j'i:p'l:v'n:|(u;%(_+'!*i;,(_)Hx*i;3(_*CE*a;:'n;@'e;F'a;L'r;R(g;Y(_+&d*n;`(w;g'a;m'i;s'a;y'a<!'o<''a<-'a<3(e<:(i<A(a<H'o<N(j<U'n<['o<a'o<g'_)#a.o<m'e<s'u<y(_#np*r=".i=/'_':h*_&[+'n=5'a=;'n=A'n=G'a=M'u=S(e=Z'i=`'i=f'e=l(h=s'h=y'u>!'n>''a>-'s>3'y>9'i>?(n>F's>L'n>R(_&x|*_+]G*g>Y'_+&m*_*CN*_*mw*_#Wv*g>_(_(i[*n>f(a>m'n>s(c>z'n?"'_).B*a?('i?.(_+&v*n?5(n?<(o?C(_$w2*o?J(_(id*n?Q'o?W(n?^'_*W8*a?d'u?j'_$&{.l?p'i?v'i?|'h@$'h@*'h@0'n@6'_'Q7'n@<(i@C'_%Uv5r@I'r@O(u@V'_)xw*o@\(a@c'n@i'n@o'_*C<*_*W#-h@u'_)#O*n@{'nA#'nA)(_')^*nA0(nA7(_)h&*_()l*_&hN-nA>'_*-8*uAD(uAK'nAQ'_'iQ*sAW'uA](qAd'_*mn*nAj'aAp(hAw'nA}'aB%'_'w%*iB+'uB1'_)Wn*eB7'bB='aBC'_%>!*_,$[*oBI(iBP'nBV'_$e%5_$@G<pB\'_+]Y*gBb(uBi(_"+~*rBp(hBw'iB}(sC&'iC,(iC3'oC9'_*CW*nC?'_$*+'mCE'_*n"'aCK'_&y''nCQ'_&%#'hCW'aC]'oCc'_'ic'oCi'_,$d*_(N)'aCo'yCu'hC{'_&=\._&^1'_)p}*_""h'aD#'hD)'uD/'iD5(uD<'oDB'uDH(hDO'iDU'hD['_(N/'gDa(lDh'uDn'iDt'gDz'_#!a.oE"(aE)'_)I,'gE/'gE5(_"p7'zE<'_)#{'gEB'aEH'nEN'iET(iE['aEa'oEg'iEm'uEs'aEy'aF!(_,$(*oF('_#>t'hF.'_)X"*_(M~*lF4'eF:'iF@'nFF(_')v'jFM'_(uO*aFS'nFY'aF_'_'%4'iFe'hFk'uFq'oFw(_^Y5dF~-fG,'oG2(uG9(aG@'uGF'_"I=5bGL'uGR'iGX'_'q-*iG^(aGe'_)I#*qGk'uGq'eGw(hG~'nH&'nH,(eH3'nH9'_'VX*nH?'_)#n.hHE'nHK'jHQ'eHW(gH^Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
_'O1-n!(n((_)m1-_'1=-u/&u4(n;&_)+V-o@&nE&gJ'uP(_&03-_#s(*_'>k*_$Bs*oW(e^&nc(_)+b-ij(gq&iv&h{&h""&i"''_%)H-_&v;-_)HW*_$_{-f"-&_%t\*_"|]-g"2(n"9&x">&_(l<-h"C&_(@2*_*5G*_"vH-n"H&i"M&g"R(u"Y'e"_'n"e'u"k'm"q'_)H`*n"w'u"}(_$E4-u#&(_(l0-u#-(n#4'_($e-i#:'n#@(n#G(g#N'_#>d*g#T'o#Z'n#`(e#g(n#n(_%;q-e#u'_$X5*a#{'_$HR*g$#(_($q*_&Ts-_"0Q*n$*'n$0(n$7'o$=(f$D'_'>t*a$J'g$P(j$W'o$]'n$c'_$k#*u$i(e$p(g$w'_(@;-u$}(g%&(g%-(n%4'n%:'_(lH*_'O=*_(Ul*_)mI-e%@'_*5Y-g%F(n%M(_$/]*h%T'_(@G*_"?h-_(@P*u%Z(n%a'o%g'_'>}*_'1I*z%m'u%s'e%y's&!'_$5l*_"ta*g&''n&-._*5P*n&:'o&@'g&F'_)mU*_)m^*n&L'g&R'j&X'_%_~*g&^(t&e'g&k'h&q'h&w'h&}'s'%'e'+(n'2'_%|&*_%NE*i'8'c'>'_'#h*u'D'n'J'_)mg*_#]J-o'P(_#d**_'1R-i'W(_$E@*_(@Y*_)+n*_%lz*i'^(_'#_*n'e(z'l'z'r'h'x'd'~'j(&'u(,(e(3(a(:'_($z-o(@(_)mp*_&_4-_%3-*_(%(-_$TG-_'o9-g(G(_(Uu-h(N'_'OR-_%`)-_"H.-_$PS-_&&I-g(T(_'OF-_#d3*a(['e(a(_)my-g(h(i(o'_(%=-n(u'_)+w*h({'g)#(_$TS-_$E4-a)*'_%e|-a)0'_)m=-_(?x-e)6'g)<(_$E4-_(@&-_$'R-g)C(_&8S*i)J'_&_@*n)P'i)V'n)\(g)c'n)i'_(lQ*_$fX-y)o'_%36-_(lZ*g)u(_%Gp*j)|'_$:s*g*$'g**'a*0'_(V#*n*6'i*<(_(l{*a*C'h*I'g*O(t*V'i*\(_%|/*_$:|*n*c'_),+*g*i(n*p(n*w(_"2.-s*~'h+&'c+,'x+2'_'?:*o+8(g+?(n+F'_%f**_$si4b+L'e+R'j+X'l+^'q+d's+j3w+|'y,$'g,*(o,1'a,7'_'?C*n,=(u,D(_$o.*_&C=*g,K(g,R(_&&a*a,Y'_#%2*n,_'u,e'a,k'_&v\*_&8\*_'1^*_$"h*x,q'n,w'_'^&*_%f3*o,}'n-%(g-,'o-2(n-9'_&&j*_&vS*u-?(n-F'g-L(n-S'n-Y'a-_'g-e'y-k'j-q'i-w(_'O^*s-~'_'oZ*_&ve*_$B|*e.&'n.,'a.2'i.8(e.?'a.E'a.K'y.Q'_)I&*a.W'n.]'_$*h*_'oc*u.c'_"^4*_$!)*_$*h*n.i'i.o'_$X>*z.u'g.{(_)nE*g/$(g/+(n/2'u/8'a/>'u/D'_(V,*u/J(n/Q'y/W'j/]'i/c(i/j'e/p(_(@b*i/w'i/}'_(VG*n0%(_&i{*i0,'e02'_&&s*b08'_%Gy*i0>'i0D'i0J(_)Hi*n0Q(_(m&*g0X(n0_(u0f'h0l'a0r'r0x'_&U**g0~(e1'(y1.'j14'_(V5*_(%R'a1:'n1@(e1G(i1N'_)Hr*_)nN*_$3(*_(@k*n1T(g1[(l1b'z1h'_),+*_(V>*_'1g*e1n'n1t'y1z'o2"(n2)(n20'n26(_&CF*_$wA*_),4*n2=(_%)T*i2D(g2K(l2R'n2X'n2^'n2d(_$K0*_%3B*g2k'a2q(g2x(i3!(g3('g3.'n34'_'#q*n3:'a3@'a3F'_'?1*u3L(a3S'o3Y(g3`(n3g'h3m'u3s'_'Og*s3y'h4!'_"?t*l4''_$c_*_"L[*n4-(_#k?*h44'g4:(n4A(_#aN*_$)[*_(@t*_)H{*_'^/*g4H(_'1p*g4O(i4V'd4\'a4b'n4h'n4n'i4t(i4{(u5$'a5*'_(VP*z50'e56'_),+*n5<(_#;I*n5C(g5J(g5Q(i5X(_?Z-g5_(_'?(*_&U!*_)n'*g5f(_&Lc-a5m'_Ny-h5s'_(lc-i5y(g6"(_&&U-a6)'g6/'n65(f6<'z6B'n6H'o6N(n6U'_'1y*a6['g6a'i6g'_'?L'_(VY*_%)]*u6m'_'ol*h6s'_"80*a6y'n7!'g7'(a7.'o74(g7;(e7B'n7H'y7N's7T'n7Z'a7`'a7f'n7l'u7r(o7y(_)nW*i8".u8/'_'$.*i85-n8A'u8G'_$EI'u8M(i8T(e8[(y8b'_(bQ*n8h'x8n'_$fm'h8t'f8z'i9"(g9)(_*6"*y90'm96'm9<'a9B(e9I'n9O'_'$%*e9U'i9[(i9b'i9h(_ir*_$fd*i9o'n9u(g9|'n:$'a:*'i:0'o:6'_'2$*a:<'i:B'a:H'_(Vb*_(m/*o:N(s:U'u:['_DK*c:a'_*5n*n:g(i:n(o:u(_*5w*a:|'g;$(_'#z*i;+(j;2'g;8(i;?(y;F'i;L'_(Vt*e;R'n;X'_(Vk*_%7N*_&CO*g;^(_),=*g;e(i;l(n;s'd;y'_#t]'_lE4g<!'_#Zr*_&U3*_$XG*_$/f*_(W(*_)IJ*t<''y<-'_(A(*_(A:*o<3'u<9'a<?'o<E'a<K'i<Q'i<W'i<]'d<c'h<i'_*64*_'^A4_)IS*e<o-_'h!'a<{(i=$'_*6=*x=*'i=0(_)ni*_&vn4a=7'e==(_"wJ*o=D'_)n`*_%NW*_%NN*_'$@*_#-N*_"oY*g=J(n=Q(x=X'n=^'u=d(u=k'v=q(a=x'_(W1*_*6+*_"7K*y=~'n>&(_&pN*a>-'o>3'a>9'_&CX*s>?'j>E'g>K(_'?R*_%$T*_(A1*_$8W*i>R(_)I\*a>Y'a>_'o>e(u>l(n>s(n>z(i?#'a?)'g?/'g?5'_%-u*_'Op*n?;'n?A'_%H$*u?G'a?M'_$ze*l?S'_&_I*n?Y'n?_'u?e._'2-*u?r(_(V}*g?y(x@"'_#s1-n@('_(@}*a@.'u@4(a@;'i@A(n@H(e@O(_%`5*n@V'u@\(e@c'o@i(_'?[*n@p'a@v'n@|'nA$'_(%X*_#zI*_'^8*iA*(gA1(nA8'_'^T*nA>'nAD'iAJ(uAQ'_'ou*_%$]*gAW(eA^'_)I/*nAd'nAj'_)I8*aAp'aAv'nA|(lB%'_%-l*cB+'gB1'yB7'_&j&*nB=(nBD(nBK(_'o~*_$P_*nBR(_%Yh*iBY.nBf'iBl(tBs'_&U<*nBy(_(mJ*nC"(_&j/*aC)'_#p'*oC/(_(mA*sC6'nC<'sCB'sCH'lCN'nCT'_)nr*_(m8*_'$7*uCZ'aC`(iCg'uCm(aCt'iCz-nD('_)n{*gD.(iD5'eD;(hDB'nDH'lDLine truncated
|
||||
@@ -0,0 +1 @@
|
||||
了 来 里 两 老 路 连 另 类 拉 力 脸 量 啦 离 李 令 流 龙 落 林 率 六 立 乱 论 理 领 留 楼 刘 列 礼 利 冷 略 轮 哩 亮 练是 上 说 时 所 使 事 三 市 死 省 手 属 谁 受 水 山 生 四 书 少 杀 设 身 声 虽 送 甚 式 神 师 岁 石 数 深 随 算 首 双 收在 这 中 着 之 只 最 再 走 做 至 长 正 自 则 住 作 占 张 总 者 站 找 种 字 真 子 州 直 重 坐 知 主 早 指 左 制 转 众 置和 还 后 好 会 或 很 号 话 回 红 花 湖 河 黑 黄 喝 海 合 汉 火 活 获 忽 画 化 含 换 何 厚 虎 喊 坏 华 横 汗 核 恨 屽 环有 也 一 与 要 又 以 月 于 由 用 已 因 元 约 应 原 杨 鱼 越 远 意 曰 言 呀 右 亦 眼 药 余 英 游 院 愿 云 营 员 银 欲 亚他 她 它 听 同 天 头 太 台 条 图 提 体 通 铁 土 跳 特 退 谈 团 推 田 停 铜 题 投 替 贴 坛 腿 逃 唐 擡 套 调 厅 叹 汤 鏄不 把 被 并 便 本 比 吧 北 兵 边 报 别 部 锛 白 变 办 背 罢 必 病 半 八 浜 帮 拜 奔 抱 表 邦 包 保 板 巴 布 班 版 宝 摆我 为 无 外 问 万 王 往 未 位 五 完 望 文 物 吴 网 晚 武 忘 微 闻 味 玩 围 吾 瓦 碗 尾 挖 屼 温 屋 舞 吻 握 亡 喂 鍏 窝的 到 都 等 对 地 大 道 得 但 多 当 打 达 带 点 党 段 第 倒 东 定 低 队 电 动 待 德 刀 掉 顶 断 调 底 洞 岛 代 短 敌 殿人 日 如 让 入 仍 若 任 儿 热 纴 月 肉 软 然 绕 弱 容 认 扔 忍 岃 润 饶 惹 柔 荣 汝 染 仁 嚷 睿 刃 揉 燃 冉 苒 壤 攘 娆就 将 及 见 叫 家 即 较 军 进 今 间 经 均 据 近 既 极 金 讲 涓 剑 仅 教 建 加 急 竟 接 尽 郡 级 酒 居 街 惊 几 九 兼 久年 你 那 能 内 呢 女 南 拿 难 您 哪 男 牛 弄 暖 乃 怒 闹 泥 念 娘 鸟 脑 尼 嗯 嫩 纳 拟 浓 农 宁 尿 捏 诺 奴 囊 扭 逆 耐而 二 鄂 俄 耳 尔 恩 恶 儿 额 哦 饿 娥 锷 讹 峨 鹅 蛾 厄 呃 扼 悪 愕 萼 遏 噩 鳄 诶 摁 児 洱 饵 贰 鵞 妸 岋 鹗 轭 庵 娿个 过 给 高 更 各 跟 国 该 共 干 官 管 光 刚 故 改 股 古 搞 供 敢 归 关 挂 宫 怪 感 功 公 攻 岗 根 港 鬼 广 哥 赶 果 贵去 其 前 却 起 区 请 全 钱 气 清 强 取 亲 且 瞧 群 桥 情 七 轻 权 期 求 殑 抢 球 青 墙 枪 奇 齐 骑 器 岂 千 旗 确 劝 切从 出 才 成 此 吃 曾 称 长 处 城 次 除 朝 初 常 场 穿 传 茶 车 呈 藏 菜 冲 承 村 船 差 刺 产 错 层 草 剉 词 厂 臣 陈 春下 向 新 想 见 小 笑 像 先 县 心 行 相 西 些 学 写 性 型 乡 信 系 需 须 项 现 象 形 线 辖 血 喜 姓 选 修 香 响 夏 绣 浠可 看 开 快 口 宽 靠 哭 空 科 块 克 考 苦 客 烤 抗 砍 孔 卡 肯 课 跨 刻 矿 壳 库 颗 阔 扩 坤 狂 款 恐 亏 扣 喀 坑 困 炕派 平 跑 怕 破 皮 铺 片 拍 凭 颇 批 旁 扑 爬 排 盘 偏 篇 陪 炮 牌 捧 配 便 票 泡 品 谱 抛 碰 瓶 骗 盼 辟 坡 胖 飘 劈 披没 们 门 米 名 每 吗 马 美 明 面 命 么 买 忙 满 某 毛 卖 骂 銆 民 墓 木 目 末 冒 妈 摸 庙 秒 密 梦 杩 灭 猛 嘛 魔 脉 莫分 副 法 发 非 放 反 方 府 风 飞 封 房 饭 复 镄 凡 赴 翻 份 负 奉 夫 犯 费 扶 佛 防 父 福 番 富 附 废 妃 俘 芙 伏 幅 粉啊 按 爱 安 阿 暗 案 氨 俺 唉 呵 奥 岸 埃 挨 庵 嶅 矮 哎 熬 哀 癌 蔼 艾 隘 碍 暧 谙 鞍 铵 胺 黯 肮 昂 盎 凹 敖 嗷 翱 鳌藕 哦 欧 鏂 喔 噢 殴 鸥 呕 偶 耦
|
||||
@@ -0,0 +1 @@
|
||||
委员会长江 昌江湖北省皇上 黄裳国民党韦小宝实际上广场 广昌双方两种 良种生长 省长 胜仗 声张 升帐现代化石首市正常 整场秘书长帝国主义成长 成章资本主义常常 尝尝 长长 场场闯王双手洪山区领导人办公室象征皇城 谎称大学生江夏区地方性上升近年来候选人统治者北京市民族乡种种 重重武当山解放军总人口消费者老百姓一方面宜昌市袁世凯全世界基本上商量 上梁总面积胡秉宸洞庭湖董事会江泽民李高成上涨生成 声称 省城 圣城想象 想想 想像 相像 相向 香香 湘乡科学技术城乡 丞相 成像 城厢转向 专项陈家洛小小的南京市万美元声响 圣像 声像创建 创见形状 性状 行装 行状平方米城墙 逞强直升机维生素城中 承重 称重说不定总经理湖南省增加值什么样经济特区互联网政治部孝感市紫禁城建筑群正中 郑重钱谦益总司令花岗岩重量 忠良 种粮 中粮房地产哈哈大笑可能性风景区墙上 枪伤长城 长成荆门市仙桃市屈家岭综合性 综合型亿立方米手工业零部件欧阳锋重伤 重赏 中上 中伤长安街周伯通明永乐刘宗敏公务员船长看上去船上 川上 穿上发达国家民族自治章程司令员随州市乡长 像章 香樟天门市地中海电视台商城 上乘 上城 上成河南省市政府劳动者整整 铮铮现状 线状 线装宋献策厂商 场上消费品音乐堂专政 转正白嘉轩想不到当事人洪七公火车站研究员 研究院代表作绝大部分新华网无线电诸葛亮状元 庄园 庄院康有为火炬计划示范县白沙洲桥头堡中南部安徽省万立方米娘娘李先念核潜艇纯收入工作者布政使向上 相商锦标赛招待会南北朝轻轻地左良玉长征双拥陆无双中世纪奖惩 江城牛金星下半年三十年强盛 枪声 强生河北省相传周芷若黄鹤楼政治局皇太极厂长 场长微生物差额选举万公斤静静地中专 中转翰林院英国人焦山河杨桥湖张湾区中将 众将 中奖 终将 重奖 中江全球化或者说印第安人用不着一点点商场 上场志愿者义务教育开玩笑百分点无霜期轻工业宋思明上将 上浆 上讲双边所有权十三年反动派纺织品 仿制品自然科学武汉大学兄长 熊掌 胸章选举权生物学四通八达徐天宏两声不知不觉亮相 两项 粮饷 两响 两厢 良乡 两箱世界各地江中卫生部不可避免物理学家朝鲜族罗马帝国柬埔寨碰撞最高峰比比皆是数十年前一天金学曾李莲英冷冷的忠诚 中程 中丞 中成 中城爱因斯坦纪念馆训练班邵大侠通讯社小时候 小时后指导员一模一样工农业荒凉 皇粮说实话发展观悄悄地民族主义分数线十九年田福堂不由自主钱其琛纤维板招聘会李肇星驾驶员监督权思想家亚历山大钟祥明洪武集体所有鹿兆鹏管理权武陵山 雾灵山第二产业大将军掌声 长绳受不了大都城楚雁潮土地革命第一产业公安县工业园赵大明贾朝轩监利县十六年青山区交界处 交接处响声 相声应聘者争相 正向 正像 征象价值观老年人陈丕显玄岳门爱国主义荆州区车城西南岩宫区雄楚殷家洲袁宗皋光亮吞吐量总公司健壮 见状就是说首创志愿军酿成一分钟货币资本保加利亚丁思甜核电站波罗的海南美洲等离子体传感器裘千仞壮观毫无疑问主人公天津市响亮 向量 项梁解放后理事长彭德怀蒋丽莉人行道双脚 双角博士生奖章十多年升降 生姜指挥员本科生多样化领导者多元化几千年指挥官必不可少军政府远远地刘伯承变质岩天文学白万剑叶剑英黎元洪运动会陈近南短短的公有制遗传学终生 钟声 众生 中生成虫财政部强有力吉林省顷刻间甘肃省老朋友机动性自然而然崇尚人民网胡宗宪蓝小梅胸中一阵阵社会党唯物主义总统府一个多月红宝石执政府继承人信息技术两张 两丈 两章复旦大学说不清公路网周期性总指挥黄瓦飞教育厅公路桥升学率隋开皇驻京办昆仑山水资源师兄弟地方官管理层开发商民主党俞莲舟北美洲哺乳动物复盖率清真寺尹志平免不了华国锋经济型 经济性中常 中场 终场 中长 衷肠手榴弹招待所做生意独树一帜专业化青铜器马列主义天津队机械厂生理学知识点改进型地表水金正日耶路撒冷监事会 简世辉动不动国庆节新闻网动物园西班牙人颜洪烈踉跄 两强 两枪金黄色笑吟吟张义民老前辈世界性实质性第三种可行性占优势田福贤安全性建筑师 建筑史热带雨林方解石自由主义用材林床边 创编朱厚照第三章 第三张金钱豹上船 商船男朋友出生率几分钟实习生一周年许许多多蔡元培公孙止教练机陌生人专场 专长 砖场 砖厂 转场世界观大奖赛张海丽店小二大洋洲缰绳 降生 Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
社会主义检察院 检察员 监察院 监察员 检查员常委会状况令狐冲资产阶级荆州市高速公路蒋介石没想到事实上万公顷太平洋李鸿章症状 整装 征状高新技术总产值无产阶级行政区黄石市与此同时神农架床上 创伤 窗上生产力中国队知识分子年轻人 年青人上海市相当于伊斯兰教研究生点点头代表团这方面运动员称之为清政府黄宗羲贡献者农产品中华门咸宁市天主教政治家绝大多数竞争力审计长自然资源县政府 现政府飞行员陕西省 山西省人民日报自治机关皇太后省辖市大吃一惊五四运动李鸿忠审判员万立方米赵志敬名胜区黄药师原材料华盛顿代表性季风气候增长率工商业表决权水产品可变资本小姑娘矿床杭天醉雄壮明成祖稳定性 稳定型杨嗣昌下半场全国性参谋长名副其实 名符其实不变资本市中心中华鲟经济作物山海关江夏郡华容县罗清泉掌门人程灵素决定性金水桥宋思明董小宛西向东脚步声胡说八道主教练大中型 大众性秦始皇红娘子三角洲双重引人注目 引人瞩目中下游对外贸易民主主义影响力霍青桐放射性梁启超台湾省田伯光熊廷弼天下第一抗生素分水岭王守仁棉纺织适应性陈文洪园艺场庄重 撞钟国家计划综合治理二十七年好不容易州政府针对性奖学金业内人士阮大铖深圳市工业部门海南省丹江口明世宗陈贞慧大都城委内瑞拉联络线苗人凤贾朝轩社会科学心脏病福建省经济体制罗田县二十四年盛华仁江纳苗袁宗皋大元帅有色金属云南省小心翼翼武昌起义留学生丁思甜东北地区众议院 众议员 中医院工学院经营者阎鸿唤椭圆形杨百顺三角形咬牙切齿相对论人际关系除此之外办公厅巡洋舰太阳能全方位股份公司梅超风汪精卫领导权生产率一等奖孙少平重工业师范大学通讯员综合征 综合症更何况工商局田见秀第三产业中间体制造商生命力说明书文艺复兴常言道标准化扬子江主动性九五之尊历史学家半殖民地银行券晒太阳不约而同市场化隋开皇欢呼声赵半山肖鸿林得天独厚由此可见张作霖双向冯玉祥辽宁队尽管如此辩证法电影节 电影界东林党执行官外交官多样性原则上中南海社会制度政治学非线性给事中人道主义五角大楼张国焘青年人第二炮兵一连串吊脚楼二十一条唯心主义乒乓球情不自禁同盟会红楼梦宣传部武警部队产业资本计划经济经济基础火腿肠一定量北冰洋不在话下运输量黄一彪于城邦一清二楚省内外陈富忠丁汝昌丁春秋迄今为止不知所措面对面千百年上床当务之急汤若望万多公里乡土气息殖民主义全球性自然灾害灵活性王兆国张家口北京地区特殊教育王昭君襄樊市殷正茂并发症钾长石显微镜郭中姚训练团范文程观察员棕黄色桐柏山有史以来二十二年好端端九宫山农民起义审判权反倾销唐太宗火电站陪审员数千年工程局全军复没中山路红卫兵丝绸之路吴应熊张家湾交响曲沈国放亿千瓦时战略性爱国人士价值量养鸡场基本工资陆军大学文工团韦香主三民主义新婚燕尔朝鲜人矿产地乱七八糟小石桥地球化学文昌市原来如此多功能照相机太行山杨建华常遇春上议院受访者甄志丙京九线流动性任免权日本国会生态学汤化龙路甬祥 卢永祥太阳年无能为力石膏矿方面军公安部队老河口市聂海胜融为一体袁宏道保康县谷城县鉴定会辣椒酱当阳市强壮王承恩王英凡星罗棋布永久性竹山县古隆中襄渝线云梦县黄土岗刘醒龙阳新县建始县权威性信春鹰徐天川袁行霈脂肪酸冲撞措手不及焦枝线磷肥厂令狐大哥山羊肉王必成杨国庆东连吴合唱团统治权涂长望王梦奎易贤忠殷海光袁宗道等额选举二等奖关广富郭凤莲汉川市胡贤生 胡先生来凤县李元正刘精松卢邦正宋教仁谭元春天心洲王新亭王学萍王永炎夏赞忠熊有伦杨国屏张新宝枝江市祝铭山保贞堂陈币桥陈难先陈秀榕成清波邓家岭丁大旺范恒山方小顿冯云乔奉恒高高凌风高陵镇郭永宏何晟铭侯张信胡康生华辰春黄橙子黄二州黄格选黄家潭黄金湾黄莲湖黄州区江家岔江夏治焦柳线经江波孔祥复老洲岭李大双李行亮连心桥凉爽 两双梁子湖区刘冬冬刘国正刘应明孟尝湖孟庆南命中率欧阳祥彭红艳彭清华阮成发沙洋县山寺镇沈春耀生物圈石寿永松林山汤洪高庹宗康万寿羹王家岗王宋大王祥喜王云龙王作荣伍家岗区武昌站西塞山区肖家岭颜邦屏杨柏龄杨晨晖杨同嘴姚来泉玉皇剑张桂华张美兰张润斌张维国张佑才张智华赵家条周培公周森锋周少波邹远东封建主为所欲为各式各样投票权谢杏芳城市Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
人民法院全国人大人大代表公元前委员长检察长张居正国民经济邓小平共产党少数民族袁承志朱元璋国家机关组成部分正阳门孙中山北京大学辛亥革命黄冈市八国联军北京城工程师国务委员黑龙江计划生育也就是说黄金周代表大会两院制文理学院集团公司丁能通青少年工人阶级固定资产经济效益董事长大展宏图中小学潜江市千公顷实事求是运营商重要性江苏省成吉思汗清华大学张翠山经济学家径流量弹道导弹陈友谅成员国上半年东北大学水电站重庆市陈水扁四川省总队长星火计划创始人蒋祝平王国生襄城区长期以来操作系统文武百官北洋军阀身份证 身分证长长的江西省望远镜省政府魏忠贤莫名其妙 莫明其妙张英才人民军队四面八方生产者焕然一新统治阶级初级阶段有限责任群众性二氧化碳人民团体糖尿病再生产 在生产排水量五星红旗国共合作现实主义小学生军事法院有所不同中新网工作部门传染病经济社会神来之笔蕴藏量京山县领导班子民主革命张之洞王晓东这样一来朝天椒截然不同商用车乔晓阳小康县调关镇蒋家冲一动不动候补委员意识形态脊椎动物摄政王装甲车航空兵井冈山大大小小武装起义特种部队广州市可想而知化妆品实实在在目瞪口呆石家庄跨国公司张三丰中年人意想不到电影院美国国会又惊又喜十月革命艰苦奋斗外向型赵宏声明王朝摸金校尉一般说来浪漫主义史天雄性生活商洛山在校生长三角商学院老先生双双田震英卢象升重晶石病虫害政府部门航空港圆锥形成年人断断续续二十六年这样的话理所当然日本政府南京城丰富多彩 丰富多采党委书记耀武扬威手电筒化学工业恍然大悟袁时中 阮士中网络游戏贵州省圣彼得堡于长江英国议会党政军意料之外总动员传教士文化教育降雨量平方厘米证券报所作所为战胜国静悄悄唐贞观显而易见二十多年风景线所到之处装甲师执政党冯公公民主人士下回分解万多公里放在眼里南昌起义地空导弹李闯王死里逃生破土动工一天到晚郭中姚向忠发上万元八十年代刘芳亮中美洲孙传庭转折点不知去向慷慨激昂全军复没在城镇扁圆形 边缘性出人意料京九铁路青海省神经元 神经原举世闻名陈政委储藏量无影无踪施用量 使用量吴香香燕京大学松花江王树声基本建设名闻遐迩大兴安岭王任重 王仁忠有所作为人杰地灵工农兵华中地区储油构造动植物园汤用彤通山县 铜山县乡政府俞正声兴山县英山县余平方米多吉才让联邦院襄渝铁路纺织厂广布政杨守敬创业园应城市改装车软件园佛教协会李小双腾龙洞杨献珍宰牲亭陈昌智陈圆圆吨粮田广水市黄梅县南漳县南振中农场主王怀远邢世忠安邦治国汉江全化学元素王维城咸丰县张明楷张志坚周纯全朱相远费胜潮郭生练黄橙子黄月英黄知真黄州菜蒋硕杰蒋远华经江波楼阳生明太子太秦钟英神皇洲松水桥唐良智田长霖团风县汪潮涌王诚汉王梅祥肖海亮修承天阳三蒸杨臣刚杨国梁杨苗洲袁姗姗张昌尔张龙俊张培刚张舒媛张学东张振仕坚定不移全过程国民收入老老实实庄稼人肾功能称得上黄河流域刘正风总而言之社会学家量子力学杨尚昆公孙胜空荡荡孟加拉国转眼间二十三年近在咫尺硬着头皮精神病从容不迫多年生荡然无存隐隐约约当之无愧旅游胜地螺旋桨粉身碎骨世界大战资源管理夏商周千家万户鬼鬼祟祟钱之江王国光灵机一动宋庆龄想象力 想像力热血沸腾孙承宗终南山 钟南山三个代表商品房冒险主义普普通通发号施令先天性百科全书毛细血管公孙谷主长白山安史之乱喜出望外严严实实英联邦商宝震宋远桥脱颖而出慕容公子歌功颂德洛阳城唐玄宗同归于尽宣讲会形形色色两三年训练场社会关系素不相识钟万仇默不作声管理系统强制性 强直性恰到好处花正芳高迎祥戒备森严劳动量文化产业牟春光台湾海峡朱长龄物质文明一氧化碳瞄准镜萧中慧触目惊心普天之下种植园军兵种文天祥洪胜海提心吊胆潜望镜年事已高轻飘飘制片厂卫生院 卫生员证监会二十九年两三天人生观长安城必要劳动教练员邓百川坚持不懈朱先生主观主义工业革命毛骨悚然明英宗三等奖皮开肉绽手无寸铁性功能赵匡胤乌烟瘴气章大郎千军万马张闻天宋公明谢天谢地幸灾乐祸忧国忧民旷开田生产队同性恋张国庆软体动物四川盆地小行星工艺美术节节败退鸦雀无声圆明园传染性见证人总司令部二氧化硫扎扎实实炼油厂竭尽全力殷天正中长期共青团劳动模范杀伤性世世代代重重地当Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
人民政府有限公司党中央中华民族剩余价值万平方米人民公社行政区域总产量洪承畴对外开放名胜古迹国民政府高等教育高级中学长方形中轴线丁能通理工学院师范学院创建者袁崇焕共产国际九曲回肠共产主义阶级斗争乡镇企业上半场间接选举钟祥市天河机场段正淳创造性各种各样浙江省山东省中小企业前所未有长治久安巡航导弹公生桥中书省仅供参考被选举权控制系统被统治者黄庭坚粮食作物民主党派京广线非同小可辽宁省江陵县流芳百世张学良凯旋归来生产线盛宣怀集成电路中山堂崇阳县黄松龄蒋家冲装甲兵抗日救亡美国政府联合政府音乐学院不动声色电子商务一国两制拉丁美洲至高无上明末清初千方百计中国足协集装箱与众不同赵宏声三十多年美国空军天文学家威风凛凛息息相关当家作主 当家做主周仲英中学生全心全意金碧辉煌生物学家一成不变自然环境环境保护接连不断梁曙光声势浩大化学反应或多或少中流砥柱甲状腺换句话说挺身而出眼睁睁惊心动魄卧薪尝胆出奇制胜武装部队平起平坐王长顺江醉章凤凰山相比之下空降兵中国大学初等教育最后通牒电子邮件有钱有势不管怎样长条形一拥而上光彩夺目封建主义回味无穷荷枪实弹活生生兴高采烈用电量新陈代谢钱塘江楚庄王规章制度主任委员中华书局民办教师肾上腺吴香香必要条件航天飞机湖北省委卖国求荣供应商变废为宝微软公司两个凡是别有风味动植物园修正主义运载火箭这就是说和平共处自动步枪国务院令道教协会周正庆蒋正华石象生城郊型石广生孝昌县张国光自力更生科教兴市通城县王宁生王尚荣庄公惠曾令良陈东升陈建生戴证良东升镇公众网蒋方舟蒋红星蒋树声蒯祥同梁孝宣容水量上官洲神皇洲田长焯王冬生小河口镇杨长槐姚湘成张龙俊张蓉蓉长岭岗赵钟泉钟朋荣钟阳阳王重阳劳动资料原始社会胡思乱想西双版纳联邦德国年产量黄蓉笑紧要关头经销商顷刻之间目不转睛中生代流通领域农副产品师范学校正常人恶性肿瘤接踵而来审时度势骇人听闻血红蛋白张永红手工业者个人崇拜经常性一声不吭义愤填膺从未有过双水村理直气壮行政院造船厂举足轻重剑桥大学郑晓京富丽堂皇官僚主义搜索引擎一举成名东正教不慌不忙没完没了下定决心声东击西医疗保险民间文学增长点别有用心化学性质名不虚传十几分钟中小型同仇敌忾英国海军消费资料炉火纯青三五成群杀气腾腾张士诚教条主义世界银行讨价还价不堪设想说不清楚中原地区抗氧化剂无动于衷中国女队中国日报一千多年自始至终丧权辱国常胜军王元章军令状香港特区产业工人流光溢彩血肉横飞中青年中上游如愿以偿营业执照人造卫星信息中心争奇斗艳资治通鉴总的来说从头到尾落花流水销售量泪流满面被调查者浙江大学光闪闪国家教委集贸市场钦差大臣京杭运河随机应变正常化愁眉苦脸构造运动官僚资本通行证专横跋扈卓天雄右丞相供不应求环境污染家用电器印象主义亚硝酸盐升降台保险公司垂头丧气商品粮 商品量知名人士温暖如春土木工程大江南北监管部门阴雨连绵得心应手工矿企业中成药国计民生雇佣劳动回心转意四季常青袁相公张朝唐张成仁家庭教育兵工厂诺贝尔奖身价百倍摇身一变扬长而去本职工作刮目相看占上风面红耳赤武侠小说想当年张春桥互联网络淮海战役太上皇中东地区坐南朝北大作文章 大做文章前门大街社会保险自相残杀矿泉水不确定性高中生红苗正梁中书三十三年天下大乱大冢匡黄封殿蒯祥官三十六扇数十万万铤而走险 挺而走险有双凤元宫城抗战时期十二指肠悄无声息不共戴天国事访问黄蓉见杀人放火一帆风顺亲朋好友深恶痛绝苏联政府军事学院启蒙运动神经细胞天涯海角正人君子罪魁祸首孟健雄外交大臣解放军报二十万两氢氧化钠长江口创建人手工艺品不了了之货真价实专制主义左丞相明治维新两用桥有声有色瞠目结舌实证主义水落石出应有尽有油然而生多平方米风土人情圆锥花序赵凤昌众目睽睽青藏铁路圣劳伦斯角动量民航总局实话实说似笑非笑夺眶而出面目全非苏联红军从头至尾古今中外千刀万剐相控阵消化系统垄断资本首都机场网络安全自由市场安定团结毫不相干赖以生存人民代表痛心疾首皖南事变引人入胜青城山生产型 生产性水泄不通发扬光大防御工事恋恋不舍热火朝天电动力学加班加点亮晶晶心力衰竭保护环境改良主义向小龙报仇雪恨城市道路接踵而至Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
平方千米行政区划平方公里另一方面降水量工作人员市场经济统一战线原种场张献忠封建社会广东省政治权利相互作用高等学校中华民国国防部长清清楚楚知识产权浩浩荡荡张召重专科学校航空母舰紧急状态邮政编码京广铁路外交部长山珍海味北洋政府中产阶级章宗祥干干净净拨乱反正商品经济工人运动少年儿童剩余劳动大街小巷游击战争轰轰烈烈太平天国冲锋枪神经系统名列前茅东长安街中国移动大专学校解放思想商业银行农田水利平民百姓人民政协抗震救灾生死存亡九阴真经马到成功行政部门依山傍水人民武装生产量剩余产品南水北调杂草丛生郑成功甲午战争嚣张气焰领导人员热泪盈眶北伐战争光合作用朝鲜半岛生活资料丹江口市救亡运动黄永胜黄土高原黄明生社会保障熊召政郑功成陈章良成交量活性染料黄石港区装卸量黄康生姜声扬田承忠姚湘成张昌平周传雄政治经济层出不穷恰恰相反想方设法明明白白二中全会五中全会空空导弹交通工具全副武装四中全会英国政府一中全会心甘情愿一本正经源源不断惊天动地心旷神怡大惊小怪明晃晃黄埔军校念念不忘行之有效微量元素交换价值世界市场兴冲冲遍体鳞伤聪明才智中国男篮应运而生斩钉截铁中山大学程先生形而上学象征性中国台湾轻描淡写流连忘返一声不响龙山文化相提并论正中间整整齐齐大名鼎鼎千千万万华北平原相互之间中央大学轻举妄动眼花缭乱北京政府生产商海洋生物心中有数意味深长直截了当沸沸扬扬风吹日晒蒙古人种昏昏沉沉混血种人躬身行礼青壮年通信卫星大中学校心惊肉跳血吸虫病不正之风千里迢迢人工智能前前后后总政治部辽东半岛开门见山一声令下工程浩大不同寻常赵争争凶相毕露张宗昌君主专制山东半岛守恒定律思想解放隐形眼镜成群结队人多势众天主教会小心谨慎大功告成中国男队东海舰队劳动强度千真万确左右两座大作文章西交民巷耿耿于怀德高望重卷土重来了如指掌明文规定随随便便有线电视千变万化山东鲁能高高兴兴条件反射心惊胆战 心惊胆颤迥然不同交通管理令狐冲心国家标准合成纤维赵小双中郎将聪明伶俐多多少少长途电话黄钟公心慌意乱凶多吉少摇头晃脑知识青年宇宙飞船宇宙空间情理之中生长激素泣不成声胆战心惊仰韶文化争权夺利专心致志变态反应技术装备艰苦创业怒气冲冲北洋水师不声不响常务委员逢年过节黄金时代相依为命感情用事工商业者惊涛骇浪异口同声长春亚泰成长性 成长型定量分析天真烂漫高高在上连绵不断生死关头司空见惯参知政事来来往往民族英雄大获全胜辽沈战役烈士陵园蹑手蹑脚一往情深在天之灵航空公司有说有笑指指点点光天化日千载难逢危言耸听为数众多香港大学繁荣富强生动活泼波澜壮阔动脉硬化汇丰银行小康之家身败名裂思前想后天下太平行侠仗义意料之中硬生生大雄宝殿飞黄腾达名存实亡生命科学罗马教皇黄宏生灵丹妙药伤天害理水生植物堂而皇之张口结舌精神抖擞惊魂未定美国市场变化多端观赏植物光明日报天山南北异想天开事关重大指手划脚 指手画脚冷嘲热讽更新换代高锰酸钾进口商品流行病学神采飞扬休养生息更有甚者人寿保险升官发财象形文字终身大事进退两难不同凡响顶头上司红六军团认股权证寡头政治勤工俭学节外生枝民不聊生似曾相识无性生殖高瞻远瞩民主联盟明目张胆平反昭雪神机妙算太上老君乘人之危封建礼教靖国神社狂风暴雨七中全会手下留情耸人听闻原始公社朝夕相处黄帝内经柴大官人雌雄同株软件系统神魂颠倒万多公顷招商引资周转量对症下药华山论剑生死攸关通用电气郑崇俭捕风捉影吵吵闹闹大显身手上海浦东土生土长仰天大笑专家系统抖擞精神风风火火管理中心上海交大小兴安岭北京猿人防晒霜气象卫星城隍庙亢龙有悔长篇大论洞房花烛静脉曲张连锁反应怦然心动心领神会造山运动中转站风驰电掣令狐掌门人工流产相得益彰管弦乐队两全其美南京政府女扮男装深山老林问卷调查蠢蠢欲动见怪不怪老泪纵横老谋深算万寿无疆玄贞道人百万雄师分道扬镳哄堂大笑升级换代统筹兼顾改朝换代红红火火彭湘湘水到渠成优胜劣汰张仲景波涛汹涌春暖花开电子元件反败为胜时过境迁 事过境迁天壤之别小农经济心血管病信息工程怨天尤人磁场强度改头换面名满天下情有独钟舍生忘死市场准入头状花序一刀两断 一刀两段正襟危坐深水炸弹多管闲事反唇相讥 反Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
抗日战争武装力量全国政协生产资料中国政府精神文明长江流域共产党人中央军委生产能力政治委员驰名中外高等院校全权代表三中全会冲积平原鸦片战争中华和钟至关重要中央集权青藏高原面面相觑生产关系新科状元总参谋长连成一片微分方程众所周知多种多样革命战争闻名中外英雄好汉文教卫生抗美援朝水利工程生长量全神贯注解放公园调味品厂郑肖庄赤手空拳六中全会海湾战争大专院校群众运动系统工程大中城市将信将疑商品流通英雄豪杰中国银行金融市场人民战争未成年人惊慌失措 惊惶失措中国电信有价证券光明磊落神通广大令狐冲笑难以想象党政机关名列榜首中国空军贫下中农黄金水道交感神经有生力量家常便饭有性生殖多功能厅乱成一团百家争鸣联邦政府肾上腺素响彻云霄非同寻常研究生院纵横交错韬光养晦见多识广袖手旁观交通银行东张西望广电总局万里长城兵荒马乱财政部长气势汹汹倾家荡产从天而降身心健康虚张声势转眼之间首当其冲有效射程无中生有综上所述原生动物身经百战大相径庭转来转去防不胜防先决条件长生不老语重心长长大成人教学质量两败俱伤听天由命郑重其事锦上添花神经纤维联想集团生产工具不相上下天下无双总状花序同盟条约远见卓识装模作样身家性命统购统销一厢情愿另眼相看代数方程年发电量农贸市场风吹草动井井有条上海申花横断山脉欣欣向荣抽样调查工农红军价值连城中等教育犯上作乱风云变幻石家庄市双汇发展众说纷纭卫国战争容光焕发三天两头中庸之道南北战争融会贯通御史中丞相距甚远相形之下参政议政天旋地转人声鼎沸苏共中央勇往直前悲从中来收支平衡扬长避短越南战争中老年人成都平原人工授精中国文联别开生面说来话长顺水推舟松嫩平原南征北战动态平衡千锤百炼百战百胜痴心妄想刀耕火种房地产商抗坏血酸秦始皇陵相去甚远一见钟情捉襟见肘重见天日总装备部宽宏大量 宽洪大量田径运动中山装重商主义装聋作哑久别重逢人之常情诚心诚意肝胆相照软件产品文武双全希望工程资源共享大政方针内政部长太平盛世湘鄂川黔一脉相承工业生产纸上谈兵兵临城下精明能干满面春风名扬天下千手观音煽风点火兴风作浪称兄道弟惊弓之鸟劳动对象年增长率偷工减料百货商店辨证论治活蹦乱跳轻重缓急问长问短有生之年表面张力天花乱坠同生共死怨声载道并肩作战急中生智众望所归各向同性好好先生欢声笑语先声夺人笑容满面臭名昭着任重道远少先队员文成公主血肉相连张灯结彩火上浇油双管齐下天山山脉中专生等价交换荒山野岭黄蓉微微教职员工名山大川享有盛誉行政处分中国海关电光石火光彩照人眼明手快罪孽深重共商国是光导纤维哗众取宠兼容并包行政诉讼中国民航超导电性共和元年蔚然成风油腔滑调老态龙钟损兵折将文工团员左轮手枪独断专行多种形式华盛顿州冷眼旁观人民政权川藏公路精神病学浓妆艳抹平顶山市三生有幸山顶洞人先见之明长命百岁长年累月承上启下从始至终非经营性加油添酱想想也是灯火辉煌短小精悍多快好省江苏舜天巧夺天工收效甚微天主教堂惺惺相惜中规中矩力争上游强身健体相亲相爱雪中送炭种子选手风口浪尖更胜一筹生意兴隆种植园主卓有成就百忙之中传宗接代满面笑容年轻气盛琼州海峡稳操胜券小事一桩真知灼见走南闯北崇洋媚外公用电话黄金时间甲状腺素巾帼英雄令人生畏面目狰狞名垂青史圆周运动沧海桑田虹桥机场皇甫先鹏狂轰滥炸廉洁奉公千山万水清华同方热功当量音响效果蜂拥而上感同身受面黄肌瘦软硬兼施卫生部长位高权重侦探小说风华正茂好言相劝两百多年烧杀抢掠同性恋者万象更新望子成龙灾难深重争分夺秒准考证号冬虫夏草官运亨通两性关系量子场论闷声不响慕容先生避暑山庄黄牌警告活动中心交响乐队民生银行网络应用瓮声瓮气博采众长产品质量见缝插针名声大振青木堂香穷困潦倒双簧管睡眼惺忪小桥流水言情小说迎头赶上朝鲜政府高风亮节告老还乡黄大仙庙将功赎罪妙趣横生能言善辩旁观者清三峡工程杀身成仁总领事馆东方明珠宫皇太后管弦乐团广船国际画龙点睛精彩纷呈绝处逢生糖尿病人相见恨晚中国公学周围神经传入神经等量齐观交响音乐了若指掌平阳公主偷梁换柱新生力量迎来送往运动神经终端用户走漏风声电闪雷鸣雕虫小技奋发向上奉若神明浮想联翩化整为零穷追猛打山清水秀少见Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
长江大桥江汉平原生产总值工程学院行政公署东交民巷封建王朝解放战争共产党员生产方式长江三峡同工同酬中华和钟通货膨胀中央委员中央政府恭恭敬敬众星捧月短篇小说总工程师世代相传交响乐团中枢神经手忙脚乱整风运动共同纲领中国政协上上下下卓有成效上层建筑摇摇晃晃中国联通战战兢兢忧心忡忡口口声声欢声雷动针锋相对忠心耿耿中央红军年轻力壮顺理成章中央银行双曲拱桥汹涌澎湃方方面面胸有成竹源远流长人民广场叮叮当当工农联盟十年寒窗匆匆忙忙争先恐后农民战争广为流传应用软件名正言顺公共场所光明正大痛痛快快朦朦胧胧宣传部长人心惶惶疯疯癫癫心事重重奇形怪状合成橡胶受宠若惊崇山峻岭招商银行风平浪静乒乒乓乓空空荡荡中国网通两千多年神经衰弱大庭广众冷冷清清轻手轻脚金光闪闪影影绰绰寄生虫病交相辉映山穷水尽谈笑风生兴师动众晕头转向三三两两乘胜追击精明强干正大光明乔装改扮说说笑笑三江平原弘光皇帝重重叠叠代代相传刀光剑影脸上无光中小学校共青团员困难重重网状结构动手动脚小巧玲珑中兴通讯成竹在胸振兴中华联产承包良久良久顺手牵羊相形见绌出口成章神经中枢小生产者横征暴敛精神病院穷乡僻壤短兵相接轻轻松松星星点点功成名就尚方宝剑蔚为壮观吵吵嚷嚷共同市场声名狼借省吃俭用芸芸众生冥冥之中一箭双雕初见成效冬暖夏凉真刀真枪像模像样转瞬之间来势汹汹老成持重王母娘娘银川平原收回成命外强中干榜上有名表面文章帝王将相功败垂成光纤通信论功行赏懵懵懂懂上海东方运动健将昂首挺胸轰隆轰隆功成身退洪水猛兽仰天长叹纵横驰骋唇枪舌剑雕梁画栋风情万种晃晃悠悠棉纺织厂拍手称快言传身教中联重科逼上梁山触景生情交通违章天上人间正当防卫转败为胜腔肠动物熟能生巧相映成趣骁勇善战非生产性工程项目丧尽天良箭在弦上遗传工程不懂装懂闪闪烁烁整装待发草莽英雄红光满面神清气爽汪伪政权才貌双全穿针引线传出神经山山水水顺顺当当头重脚轻永生永世兵来将挡良辰美景丧心病狂伸张正义同床异梦中央乐团窗明几净减员增效老生常谈瓶瓶罐罐上行下效万丈深渊言归正传正本清源滚动轴承清正廉洁蜻蜓点水羊肠小道仰面朝天定向培养工程建设官样文章广种薄收环环相扣尖端放电民盟中央强强联合青春年少掌棒龙头中等学校字正腔圆走街串巷改弦更张滑动轴承空空洞洞两袖清风满面红光名利双收袅袅婷婷倾国倾城熊熊烈火勇挑重担章回小说重重包围轰轰隆隆建设工程控制工程率先垂范平平静静情景交融受控对象鹬蚌相争称王称霸声情并茂声如洪钟师生员工稳中有升应用环境蹦蹦跳跳空中小姐老少边穷人定胜天中产阶层程控电话楚汉相争矫枉过正岭北行省强颜欢笑上蹿下跳上港集箱壮志未酬充要条件春光明媚建筑工程胶着状态零零星星善始善终少年老成远涉重洋张皇失措板上钉钉从从容容丁苯橡胶多数两项红杏出墙甲状腺炎琅琅上口柔肠百转性命交关休眠状态专员公署弹冠相庆公共交通过关斩将角弓反张能上能下弄假成真娉娉婷婷上官剑南神奈川县生生世世征南将军壮志凌云叮当作响东莨菪碱冬季两项豪情壮志欢蹦乱跳快手快脚两三分钟山高水长四川长虹瓮中捉鳖养老送终乙状结肠百炼成钢广东政府画栋雕梁两千万元令狐冲转深深浅浅说长道短长话短说正三角形重赏之下重重围困东郭先生奋勇争先祸从天降娇小玲珑尽量减少莽莽苍苍跳跳蹦蹦长郡中学转世灵童臭名远扬更上层楼攻守同盟航空航天坑蒙拐骗冷水江市两三千元缅甸联邦渺渺茫茫妙手空空蓬勃向上人强马壮师洪向阳望穿秋水香港海关枭首示众邀功请赏装疯卖傻兵凶战危城市交通从中作梗东方航空防城港市精诚团结连中三元欠债还钱人间天上生存斗争首尾相连特征方程挑挑拣拣香港政府迎风招展才能真正财务状况成为中国充分调动传说中的对话框中非常重要工程施工工伤保险工作情况公共卫生公司章程官方网站冠状病毒广泛应用宏观调控环境卫生活动现场家庭成员进行调整进展情况竞争对手跨境电商年上半年情况进行生活环境生活质量生态环境施工现场实践证明市场监管市场营销受到影响团队成员推广应用完全相同卫生健康线上线下乡村振兴相关工作相关规定相关内容相关人员相关政策行政行为宣传工作宣传贯彻宣传活动营养成分在生活中证明材料质量标准中国市场中心城市重点Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
中山公园长篇小说成千上万黑龙江省软件工程垂帘听政朝鲜战争装机容量商品生产中小学生能工巧匠中篇小说相辅相成京广中心面向对象冲锋陷阵上山下乡冠状动脉中央党校关中平原三长两短调兵遣将香香公主装腔作势生产过剩冠冕堂皇两手空空炯炯有神光电效应中国香港成千成万行政官员甲状旁腺千疮百孔雪上加霜水涨船高中信证券成矿作用雄心壮志蒸蒸日上装神弄鬼同病相怜中小城市繁荣昌盛强权政治目光炯炯成百上千环境影响娇生惯养兵强马壮弄巧成拙智勇双全良性肿瘤慌里慌张身强力壮闯荡江湖广东省委红斑狼疮相生相克兵戎相见常规战争冷若冰霜长盛不衰招摇撞骗上官铁生黄淮平原参众两院精兵简政笑脸相迎兴衰成败饱经风霜宫廷政变情况严重寿终正寝张广才岭甚嚣尘上生产队长创造条件神圣同盟中田英寿明正典刑萍水相逢线性方程官房长官转轮手枪惊恐万状正中下怀多数两项乘胜前进身强体壮有偿转让关停并转矿泉水瓶两天晒网天兵天将项庄舞剑掌声雷动丁腈橡胶防洪工程能征惯战管营相公黄粱美梦两性生殖庄文皇后城乡建设创建工作创新创业党风廉政工程质量精神状态临床表现临床应用全面建成身体状况生产成本生产过程生产经营市场竞争想象中的严重影响应收账款营商环境优良传统这种情况这种现象正常工作正常运行证券市场中共党员中国传统
|
||||
@@ -0,0 +1 @@
|
||||
中共中央横冲直撞精兵强将跌跌撞撞重中之重堂堂正正中东战争端端正正险象环生甲状腺肿状态方程平平常常条条框框盛况空前雄伟壮观集装箱船争强好胜众志成城平平整整方方正正中小城镇定向招生风风光光漂漂亮亮正正经经勉勉强强长长短短质量上乘工工整整同床共枕上纲上线相反相成常胜将军龙凤呈祥川端康成慌慌忙忙逞强好胜宽敞明亮梦想成真轻装简从掂量掂量两相情愿上海强生产生影响工商行政健康成长躺在床上专项行动专项整治
|
||||
@@ -0,0 +1 @@
|
||||
诚惶诚恐成双成对轻装上阵健康状况两种情况
|
||||
@@ -0,0 +1 @@
|
||||
了 乐 楽 肋 绿萼 老二 竻 勒 老儿 脸儿提 体 题 替 踢 鍗 剔 梯 啼 蹄 戻 屉 剃 涕 惕 嚏 是 棣 堤 洟 锑 缇 折 狄 肆 悌 达和 河 喝 合 何 核 荷 贺 孩儿 禾 盒 诃 嗬 劾 颌 阖 褐 赫 鹤 壑 龢 楁 呵 垎 皬 郃 格 螛 霍 苛 洽 蝎 涸 菏 柇 硅 粭 曷 鞨和 湖 忽 虎 户 胡 呼 鍙 护 沪 互 乎 壶 惚 弧 狐 斛 葫 瑚 糊 蝴 浒 唬 琥 戶 扈 綔 戯 煳 汻 粐 摢 嫭 觳 羽 笏 祜 苸 核他 她 它 塔 图案 踏 沓 牠 祂 塌 拓 榻 鳎 蹋 獭 嗒 挞 傝 太 铊 闼 达 褟不 部 布 步 补 捕 哺 怖 歩 埔 埠 簿 卜 餢 庯 钚 卟 溥 埗 瓿 堡 逋副 府 复 赴 负 夫 扶 佛 父 福 富 附 俘 芙 伏 幅 付 鍑 腹 抚 浮 赋 釜 妇 缚 服 辅 肤 孵 敷 弗 孚 拂 氟 茯 符 袱 辐 蝠 甫我 握 窝 卧 挝 倭 涡 蜗 沃 斡 楃 渥 硪 瘟 夭 肟 龌 擭的 地 得 德 第二 嘚 徳 点儿 当儿 定额 锝地 第 低 底 敌 帝 弟 棣 抵 递 堤 滴 狄 迪 涤 笛 嘀 嫡 翟 邸 砥 骶 旳 谛 缔 蒂 氐 的 娣 勺 芍 牴 籴 碲 蹄 柢 羝 珶 樀 荻也 因而 页 叶 业 夜 爷 液 婴儿 野 耶 咽 掖 椰 噎 冶 曳 晔 烨 谒 腋 喝 邺 邪 拽 墅 荼 暍 靥一 以 已 意 亦 义 易 依 亿 槸 宜 异 移 衣 役 矣 议 伊 译 仪 夷 翼 遗 疑 倚 医 壹 揖 漪 沂 怡 咦 姨 贻 胰 颐 彝 乙 蚁 椅你 泥 尼 拟 逆 妮 倪 霓 昵 匿 溺 腻 暱 孴 呢 棿 铌 妳 睨 祢 伲 儗 鲵读 度 毒 都 独 渡 督 堵 肚 赌 嘟 渎 犊 読 笃 睹 妒 杜 镀 涜 椟 蠹 竺 阇 牍 秺 芏与 于 鱼 余 欲 玉 御 语 雨 遇 愈 誉 瑜 羽 域 予 舆 欎 込 迂 淤 瘀 妤 盂 俞 禺 娱 馀 渔 萸 隅 愉 渝 逾 愚 榆 虞 宇 屿 禹大 打 达 答 搭 答案 档案 鞑 哒 嗒 沓 瘩 疸 迭 亣 剳 塔 怛 垯 跶 笪 羍而 二 二人 耳 尔 儿 児 洱 饵 贰 栭 毦 濡一个 应该 有关 英国 严格 员工 阳光 一股 一根 沿革死 四 寺 司 似 斯 丝 思 私 祀 厮 嘶 撕 巳 価 泗 饲 嗣 肆 涘 驷 咝 缌 锶 厕 祠 俟 徙 姒 笥 汜中国 这个 最高 整个 职工 祖国 资格 中共 主管 战国个 各 哥 格 隔 歌 阁 割 革 鿔 戈 疙 咯 胳 鸽 搁 葛 膈 铬 滆 盖 犵 牱 鞈 镉 虼 硌 圪 仡 彁 假 噶 颌 嘅 烙 搿 嗝 浩 蛤 敋去 区 取 曲 娶 粬 趋 阒 驱 屈 祛 躯 渠 瞿 衢 觑 趣 紶 岖 龋 鑺 蛆 枸 戌 劬 敺 蠼 诎那 拿 哪 纳 娜 钠 捺 南岸 难熬 尼奥 絮 衲 镎呢 女儿 哪儿 那儿 呐 讷 鸟儿 男儿 娘儿 努尔如 入 月 汝 茹 儒 孺 濡 蠕 乳 辱 褥 嗕 女 嬬 铷 曘把 吧 罢 八 巴 备案 拔 爸 不安 粑 灞 扒 叭 芭 疤 抜 跋 靶 坝 耙 霸 胈 钯 峇 笆 哵 湃 捌 魃 紦 弝怕 爬 平安 耙 趴 啪 葩 琶 帕 偏爱 芭 舥比 必 逼 笔 毕 闭 避 壁 鼻 臂 璧 碧 彼 匕 吡 俾 鄙 币 庇 陛 毙 婢 敝 弼 痹 弊 蔽 辟 嬶 濞 嬖 裨 楅 铋 拂 馥 陂 媲 卑 跸皮 批 辟 劈 披 匹 丕 坯 噼 霹 陂 毗 疲 啤 琵 脾 痞 癖 屁 媲 僻 譬 嚭 旇 纰 铍 庀 副 蚌 吡 俾 庇 蕃 拂 邳 卑 被 鼙 伓 枇需 须 虚 许 徐 叙 序 续 吁 戌 胥 嘘 墟 栩 旭 恤 绪 婿 絮 煦 続 蓄 畜 裇 邪 歔 呴 诩 浒 圩 芋 滀 溆我们 文明 外面 万亩 午门 外贸 完美 闻名 未免 舞美可 科 克 客 课 刻 壳 颗 珂 磕 苛 柯 棵 坷 渴 恪 咳 缂 颏 敤 岢 喀 窠 髁 蝌 氪 嗑 锞他们 它们 她们 天门 太庙 提名 透明 探明 题目 同盟自己 之间 增加 直接 专家 只见 逐渐 资金 中间 宗教没有 贸易 美元 满意 命运 模样 名义 民用 每月 免疫国家 国际 根据 各级 更加 感觉 高级 关键 攻击 工具日里 力 离 李 立 理 礼 利 哩 例 历 丽 粒 梨 厘 狸 犁 漓 璃 黎 篱 罹 锂 豊 鲤 厉 吏 励 沥 戾 隶 俐 荔 栗 砺 砾 莅 莉 笠 痢其 起 气 七 期 奇 齐 骑 器 岂 旗 妻 砌 弃 蕲 绮 启 棋 漆 柒 凄 栖 戚 欺 蹊 祁 岐 歧 祈 俟 脐 崎 淇 琦 琪 祺 鳍 麒 乞 企及 即 既 极 急 级 几 记 机 集 计 击 忌 祭 鸡 基 吉 寄 脊 积 继 挤 济 己 给 疾 季 剂 籍 激 肌 际 技 戟 讥 叽 饥 圾 矶 唧可以 科研 考研 可用 客运 考验 抗议 开业 空运 矿冶发展 负责 放在 分钟 复杂 分子 纺织 方针 否则 非洲工作 各种 广州 贵族 关注 工资 高中 各自 改造 公主什么 甚么 说明 生命 上面 市民 声明 沙漠 水面 神秘主要 这样 重要 作用 职业 之一 资源 专业 中央 左右问题 舞台 委托 物体 外头 顽童 妄图 文体 万头 文坛进行 举行 继续 机械 教学 江西 决心 教训 江夏 精细地方 对方 东方 对付 大夫 大幅 答复 杜甫 豆腐 东风銆 末 摸 魔 莫 抹 磨 膜 摩 墨 模 谟 馍 摹 嬷 蘑 沫 茉 陌 寞 漠 蓦 默 没 眽 懡 镆 万 粖 殁 勿 蟆 帕 帓 秣 靺么 名额 明儿 嚜 摩尔 妹儿 木耳 马儿 末 米尔已经 研究 以及 眼睛 意见 一句 一件 一级 一家 依据全国 奇Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
慌慌张张踉踉跄跄爽爽快快茁壮成长清清爽爽临床症状
|
||||
@@ -0,0 +1 @@
|
||||
是 时 使 事 市 式 师 石 十 似 史 实 诗 世 食 势 室 始 试 失 视 鍦 施 识 氏 尸 士 湿 拾 侍 兘 誓 狮 実 蚀 矢 驶 屎 仕 示在 再 载 才 灾 哉 栽 宰 崽 菑 甾和 或 火 活 获 佸 钬 货 伙 祸 豁 惑 霍 镬 壑 扮 蠖 吙 邩有 又 由 右 游 油 尤 哊 忧 优 犹 友 攸 呦 幽 悠 邮 铀 酉 黝 幼 佑 柚 祐 诱 釉 斿 湵 宥 奥 鱿 疣 卣 蚴 囿 鼬 狖 亴 莸 櫌为 未 位 微 味 围 尾 喂 鍏 魏 威 维 卫 委 胃 谓 危 偎 薇 巍 韦 圩 违 唯 帷 惟 潍 伟 伪 纬 苇 炜 玮 娓 萎 猥 痿 畏 尉 渭脱 拖 托 陀 坨 驼 妥 椭 唾 驮 咃 仛 橐 鸵 乇 税 隋 鼍 惰 牠 拓 沱 魄 跎 佗 砣否 不 紑 缶人 任 纴 认 忍 岃 仁 刃 壬 妊 韧 饪 忎 屻 纫 轫 姙就 酒 九 久 旧 救 揪 纠 究 鸠 啾 灸 玖 韭 臼 咎 疚 舅 柩 鹫 厩这 着 者 折 这会儿 遮 哲 辄 蛰 辙 褶 浙 蔗 悊 锗 粍 褚 庶 谪 嗻 嘀 潪 柘 晢月 约 越 曰 跃 瀹 岳 阅 玥 悦 粤 岄 乐 蜕 钺 钥 刖 彟到 道 倒 刀 岛 盗 导 捣 瓙 叨 祷 蹈 悼 稻 刂 槝 纛 惆 敦 忑 氘都 斗 豆 抖 兜 陡 逗 痘 窦 剅 逾对 队 堆 兑 対 怼 鐜 敦 塠来 赖 莱 頼 籁 梾 涞 崃 癞 瀬还 海 害 咳 嗨 孩 骸 亥 骇 嗐 氦要 药 咬 腰 摇 妖 窑 邀 夭 吆 爻 尧 肴 姚 谣 遥 瑶 钥 薬 曜 耀 闄 傜 垚 峣 舀 愮 瀹 徭 疟 淫 鹞 崾 繇 杳 约带 待 代 戴 呆 大 岱 袋 歹 逮 傣 怠 殆 贷 帯 黛 绐 棣 簤 迨 嘚 甙太 台 擡 态 泰 胎 苔 汰 肽 钛 炲 冭 粏之 只 至 直 知 指 制 置 治 职 质 值 支 纸 志 致 智 止 旨 掷 执 枝 织 汁 芝 吱 肢 栀 脂 蜘 侄 値 植 殖 鉄 址 芷 祉 咫 枳住 主 朱 驻 诸 竹 猪 注 珠 煮 筑 助 祝 柱 铸 诛 茱 株 蛛 竺 烛 逐 丶 渚 嘱 瞩 贮 蛀 纻 拄 槠 笁 宁 炷 劯 箸 茁 铢 褚 柠得 嘚接 街 皆 届 界 解 节 借 结 戒 截 阶 姐 劫 揭 掲 秸 杰 拮 洁 桀 婕 捷 睫 竭 羯 介 芥 诫 桔 诘 嗟 蚧 颉 差 假 滐 玠 亥 唧吃 持 赤 迟 翅 湁 池 齿 嗤 驰 哧 痴 弛 尺 侈 耻 歯 叱 斥 炽 敕 彨 螭 饬 叺 魑 笞 呎 茬 莉 銐 瘛 匙 蚩 媸 鸱 啻 踅干 敢 个 感 赶 肝 杆 甘 苷 柑 竿 酐 尴 秆 橄 擀 赣 忓 汵 皯 魐 绀 汗 簳 淦 倝 粓 捍 矸 奸后 厚 候 猴 侯 吼 喉 逅 鲎 帿 骺诺 挪 懦 糯 喏 锘 搦 娜 傩 濡内乃 耐 奶 妳 奈 氖 嬭 艿 鼐 萘但 单 弹 蛋 丹 担 淡 胆 単 眈 耽 郸 疸 旦 诞 惮 氮 澹 勯 啗 澶 掸 檐 冉 蜒 詹 湛 忱 亶 殚 褝 疍 啿 窞 啖谈 坛 叹 探 碳 滩 坍 贪 摊 瘫 昙 覃 痰 谭 潭 檀 忐 坦 毯 炭 傝 憳 燂 弹 钽 沈 澹 湛 倓 袒 舔言 眼 盐 烟 沿 演 严 岩 掩 燕 檐 胭 淹 焉 湮 腌 嫣 延 闫 妍 炎 研 阎 筵 蜒 塩 颜 奄 俨 衍 偃 琰 厌 彦 砚 宴 晏 艳 验 谚月 肉 柔 揉 粈 鞣下 辖 夏 吓 瞎 峡 虾 匣 侠 狭 遐 暇 瑕 霞 鍜 呷 鎼 罅 假 敮 唬 叚 狎 厦被 北 背 倍 杯 备 碑 辈 卑 悲 贝 悖 惫 焙 蓓 呗 臂 钡 孛 拔 跋 俾 陂 狈 鞴 牬 菩多 躲 夺 垜 朵 舵 咄 哆 铎 踱 垛 剁 堕 惰 跺 奲 亸 敚 夛 兑 陀 隋 掇 揣 捶 憜 棰过 国 果 郭 锅 裹 埚 帼 椁 猓 活 瘑 虢 彉 唬好 号 灏 豪 蒿 蚝 毫 嚎 壕 郝 昊 浩 耗 皓 滈 濠 皋 睾 妞 悎 貉 镐 皥 唬 儫会 回 挥 毁 灰 绘 汇 恢 晖 辉 麾 徽 悔 卉 讳 荟 诲 贿 晦 秽 惠 絵 慧 蕙 烩 蛔 櫘 洄 喙 濊 恚 睳 阓 诙 囬 鐬 堕 皓 涣 溃出 处 除 初 楚 岀 傗 厨 锄 雏 橱 処 杵 础 储 褚 畜 搐 触 矗 滀 绌 亍 櫉 濋 淑 怵 柠 絮 黜 敊 刍 樗 俶 憷所 缩 锁 索 唆 梭 嗦 羧 琐 娑 鏁 傞 鎻 洓 霍 莎 嗍 睃 衰给很 恨 狠 痕 佷 艮 噷 拫看 砍 刊 勘 堪 坎 侃 槛 瞰 龛 竷 嵁 惂 嵌新 心 信 锌 忻 芯 辛 昕 欣 歆 薪 馨 鑫 衅 寻 莘 噺 囟 噷却 确 缺 阙 炔 雀 鹊 榷 皵 瘸 埆 芍 阕最 嘴 罪 醉 栬 厜 撮 羧 咀错 剉 搓 磋 撮 挫 措 虘 夎 棤 差 昔 锉 厝高 搞 告 糕 稿 诰 皋 羔 髙 睾 膏 镐 缟 锆 蒿 咎 篙 浩 筶 杲才 菜 猜 彩 采 财 裁 蔡 踩 材 睬 婇 倸没 每 美 枚 煤 梅 酶 眉 玫 莓 媒 霉 毎 镁 妹 昧 媚 寐 魅 浼 篃 嵋 旀 槑 谜 糜 镅 媺 楣 袂 鬽走 奏 邹 揍 撮 诹做 作 坐 左 座 昨 琢 佐 唑 酢 撮 乍 祚 嘬睿 蕊 芮 锐 瑞 兑 叡 蚋 蜹 桵因 银 引 印 饮 音 阴 隐 姻 茵 荫 殷 吟 寅 淫 龈 尹 蚓 瘾 胤 听 螾 垦 湮 壹 沂 湛 噾 窨 粌爹 跌 迭 谍 喋 叠 碟 蝶 戜 牒 眰 曡 佚 褶 窒 嗲 踢 至三 散 繖 伞 帴 潵 糁 圣安娜本 锛 奔 苯 笨 夯 伯尔尼 贲 包二奶 博尔努们 门 闷 焖 汶家 加 架 假 甲 价 夹 嘉 佳 嫁 驾 贾 镓 伽 茄 迦 枷 痂 荚 戛 颊 钾 稼 戞 珈 浃 岬 袷 咖 拮 暇 郏 挟 叚 婽 葭外 歪 竵 夭 崴分 份 粉 坟 吩 纷 芬 氛 酚 汾 焚 奋 忿 愤 粪 瀵 奔 翂 枌 拚 扮 蚡 帉办 半 板 班 版 般 搬 颁 伴 湴 拌 斑Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
辽 料 寮 撩 疗 聊 僚 寥 缭 燎 廖 了 镣 撂 叾 蓼 佬 獠 潦 钌 曢年 念 拈 黏 捻 碾 廿 辇 撵 姩 鲇 辗 蔫 粘宁 拧 狞 柠 凝 攘 佞 咛说 烁 朔 硕 数 搠 勺 溯 槊 蒴谁 水 睡 税 涚等 灯 登 瞪 噔 蹬 邓 凳 磴 镫 澄 橙 簦捉 着 拙 桌 灼 卓 茁 浊 酌 啄 镯 籗 犳 窡 擢 晫 斫 劅 涿 焯 勺 浞 叕 濯 缴 琢找 招 照 诏 赵 召 爪 罩 兆 钊 昭 沼 肇 朝 着 晁 棹 瞾换 环 还 浣 患 缓 寰 唤 欢 桓 鬟 幻 宦 涣 焕 獾 垸 鲩 圜 豢 嵈 洹 锾 痪 脘 皖 眩 奂能一个 亿个 一格从 璁 匆 囱 葱 聪 丛 従 婃 熜 賨 淙 苁 総 樷并 兵 病 柄 冰 饼 禀 丙 秉 炳 摒 槟 屏 昞 幷快 块 筷 酷爱 会 魁 傀自己 自给 字迹 子集用 拥 涌 勇 永 庸 傛 鳙 佣 痈 雍 慵 甬 咏 泳 俑 踊 槦 蛹 饔 壅 砽 恿 灉 臃可以 可疑 刻意 课以 科益 可意前 钱 千 迁 浅 牵 遣 潜 铅 欠 签 褰 芊 谦 虔 钳 黔 谴 茜 倩 嵌 歉 骞 搴 悓 寨 箞 堑 涔 伣 嗛 缱 钤 佥 慊 掔 忏 柑 腱 芡见 间 剑 建 兼 件 渐 僭 舰 箭 简 尖 煎 监 减 肩 剪 蹇 健 鐗 坚 捡 奸 歼 艰 笺 拣 俭 柬 茧 检 検 睑 碱 荐 贱 涧 谏 溅 腱见 先 县 现 线 显 仙 弦 献 西安 鲜 限 险 嫌 闲 衔 陷 贤 纤 掀 酰 咸 涎 娴 険 宪 県 馅 羡 腺 臽 崄 岘 探 矣 寰 舷 藓 珗 濂小 笑 号 校 孝 傚 消 枭 骁 宵 逍 萧 硝 销 潇 箫 霄 嚣 淆 晓 筱 肖 効 哮 效 啸 猇 削 庨 皢 彇 姣 佼 俏 芍 叟 爻 唬 鸮 崤更 庚 耕 羹 哽 耿 梗 绠 郠 埂 颈 亘 亢 邢 暅便 边 变 编 遍 鞭 辨 扁 卞 辩 辺 蝙 贬 匾 弁 汴 変 辫 箯 拚 苄 缏片 偏 篇 便 骗 翩 囨 谝 楄 鍂 騗 骈 蝙让 嚷 壤 攘 儴 瓤 禳听 停 厅 挺 亭 廷 汀 烃 庭 婷 蜓 霆 町 艇 閮 厛叫 较 教 脚 交 角 轿 笅 焦 觉 郊 姣 娇 浇 骄 胶 椒 蛟 跤 蕉 礁 佼 狡 绞 饺 皎 矫 铰 搅 剿 缴 窖 酵 鲛 妖 撹 鹪 憿 譥 醮当 党 挡 档 垱 荡 铛 宕 珰 筜 谠 裆 凼地区 地去同 通 铜 痛 统 童 筒 囲 佟 彤 桐 酮 潼 瞳 捅 桶 勭 庝 粡 炵 恸 僮 嗵 侗 偅 樋 鲖 眮天 田 甜 添 填 恬 舔 提案 嗔 滇 町 畠 忝 佃 阗 搷 腆企业 七夜 起夜以及 一级 遗迹 一记 异己 疑忌 一季 乙级 一集 艺妓行 性 型 形 姓 星 兴 醒 刑 惺 猩 腥 邢 杏 幸 侀 铏 皨 硎 饧 省曾 层 蹭 僧 噌增 熷 増 憎 赠 甑 曾 缯元 原 远 院 愿 员 垸 源 圆 袁 缘 园 怨 涓 援 鸢 冤 鸳 渊 円 沅 垣 猿 辕 苑 媛 箢 棩 杬 囦 塬 鼋 瑗 爰 鎱 衏 掾 阮 宛 捐手 受 首 收 守 授 兽 瘦 収 寿 狩 售 绶 垨臣 陈 沉 趁 称 沈 宸 琛 嗔 尘 忱 辰 晨 衬 鍖 谌 嚫 谶 曟 龀 橙 眈 湛 疹 硶 郴 抻名 明 命 鸣 茗 冥 铭 溟 洺 姳 萌 皿 佲 螟 眳谁其他 其它应 英 营 硬 迎 赢 影 瀛 郢 鹰 応 莺 婴 瑛 缨 樱 鹦 膺 盈 荧 莹 営 萤 萦 楹 蝇 嬴 颖 映 嘤 颍 渶 逞 哽 瘿 朠 濙占 站 战 斩 展 粘 沾 盏 毡 詹 瞻 崭 辗 栈 绽 湛 戦 蘸 澶 惉 旃 枬 嶃点 电 殿 店 典 垫 掂 滇 颠 巅 癫 碘 佃 甸 惦 淀 奠 癜 靛 壂 拈 涎 踮 簟法律总 纵 宗 鍐 综 棕 踪 総 粽 鬃 潈山 善 闪 扇 珊 擅 删 杉 姗 衫 煽 陕 讪 汕 疝 缮 膳 赡 蟮 椫 苫 膻 炶 芟 搧 掺 禅 澹 邓 檀 栅 邖 剼 敾 鳝 笘 嬗请 清 情 轻 殑 青 庆 倾 卿 氢 蜻 晴 氰 擎 顷 声 箐 罄 倩 軽 磬段 断 短 端 锻 缎 踹 椴 煅连 脸 练 联 链 莲 濂 炼 帘 怜 涟 廉 镰 敛 恋 鲢 湅 堜 濓 楝 琏 臁 殓 苓 奁 燫 裢 蠊共 供 宫 功 公 攻 工 拱 恭 弓 肱 躬 龚 巩 汞 贡 厷 觥 杠 虹 愩红 鸿 轰 哄 洪 烘 弘 宏 泓 虹 闂 闀 垬 粠 鍧 闳 港 汪另 令 领 灵 岭 陵 零 伶 泠 苓 玲 凌 铃 绫 羚 翎 聆 菱 龄 齢 呤 夌 棂 皊 鲮 棱 拎 蛉 掕 磷全 权 劝 圈 拳 泉 诠 痊 蜷 権 醛 犬 券 佺 鳈 卷 荃 绻 棬 栓 圳 烇 獾 铨 湶 颧行 杭 航 夯 绗 肮 酐 桁 珩 吭横 哼 亨 恒 桁 珩 衡 佷 姮 蘅必须 必需经 竟 惊 京 精 境 荆 静 景 净 颈 径 镜 井 敬 茎 竞 泾 旌 経 菁 晶 睛 粳 兢 鲸 阱 憬 璟 警 胫 痉 婧 靓 靖 殑 踁 迳 倞 晟真 镇 阵 震 针 朕 珍 贞 侦 帧 桢 祯 斟 甄 蓁 臻 诊 枕 疹 圳 振 赈 樼 榛 瑧 鸩 禛 稹 滇 鼎 箴 潧 砧如何各级 歌伎王 往 望 网 忘 亡 汪 枉 惘 妄 旺 亾 徃 罔 暀 匡一次 依次 以此 以次 亿次 一词 义词那么 那末仍 扔 戎东 动 洞 懂 冬 咚 董 冻 侗 栋 働 桐 酮 甬 硐 氡 戙 勭 姛少 烧 稍 哨 苕 梢 焼 勺 芍 韶 邵 绍 捎 旓 杓 艄 鞘第一 敌意 地衣如此杨 阳 养 羊 钖 样 扬 洋 氧 仰 央 殃 秧 鸯 疡 痒 恙 様 漾 氱 炴 佯 旸 烊 蛘梦 猛 蒙 萌 盟 朦 檬 锰 懵 孟 虻 儚 明 曚 蠓 蟒 勐一起 一齐 仪器 一期 义气 遗弃 以期 一气 意气 益气州 周 洲 轴 皱 粥 舟 肘 帚 纣 咒 宙 昼 骤 绉 胄 柚 扭 啄 Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
上 伤 尚 商 赏 殇 熵 晌 裳 绱 汤 墒中 种 重 众 钟 终 忠 肿 衷 冢 踵 仲 偅 锺 盅 柊 伀 董 潼 彸 尰将 讲 江 降 奖 浆 姜 蒋 僵 疆 桨 匠 绛 酱 缰 强 虹 醤 犟 彊 弶强 抢 墙 枪 将 腔 呛 羌 锵 蔷 羟 跄 炝 唴 戗 樯 戕 锖我们他们 它们 她们 塔门兄 雄 胸 凶 熊 匈 芎 汹 夐向 想 像 相 乡 项 象 香 响 湘 襄 降 箱 详 厢 镶 祥 翔 享 饷 巷 橡 亯 缃 飨 亨 攘 闂 芗 庠这个 这歌问题 文体不是 不时 布什 捕食 不适 不失 布施 卜筮 补时 布市成 称 城 呈 承 乘 盛 程 撑 丞 诚 乗 晟 惩 澄 橙 逞 骋 秤 絾 悜 鐣 畻 郢 蛏 棱 娍 棦 铛 敞两 量 亮 粮 辆 梁 凉 良 粱 両 谅 晾 踉 椋 靓 魉长 张 掌 章 帐 仗 涨 杖 丈 彰 漳 樟 璋 胀 账 障 獐 鄣 瘴 暲 嶂长 常 场 厂 唱 尝 肠 昌 猖 偿 嫦 敞 怅 畅 倡 尚 阊 娼 苌起来如果正 争 证 政 怔 睁 征 整 郑 蒸 症 挣 峥 狰 铮 筝 徴 拯 丁 诤 氶 丞 町 帧 敞 承技术 记述 基数 级数 计数 记数 奇数 集束 机数 疾书历史 立时 历时 理事 李氏 砾石 立誓 力士 立式 离石一些湖北 虎背一般 一半 一班 一斑 翼板由于 犹豫 有余 优于 鱿鱼 忧郁 优裕 游鱼 幼鱼 优遇省 生 声 胜 升 圣 盛 剩 绳 牲 笙 甥 鍟 剰 枡 丞 晟 嵊所以 蓑衣这里 哲理会议 回忆 会意部分 部份 不分需要 须要怎么组织 阻止 阻滞 足趾 阻值 祖制许多日本具有记者 急着国际 国籍 过激 过继武汉 吴晗 无憾根据因此而且提出 剔除我国职业 枝叶 执业 汁液 置业 纸业 值夜 纸页 之夜制度 只读你们以后 蚁后世纪 实际 时机 事迹 市级 诗集 史记 试剂 十几 史籍为了之一 质疑 旨意 执意 直译 致以 致意 置疑 制衣 制艺主席 竹溪 朱熹 竹席冲 虫 重 充 崇 忡 憧 宠 舂 铳 酮 潼 偅 种 茧 崈民族基本 几本自然 自燃大学 大雪计划 激化 极化 计画不会 不讳 不回时期 士气 十七 石器 石砌 湿气 时气 使其 是其机构 积垢大家 打架 打假 大加 搭架特别改革这么折磨 这么一直 一只 遗址 一致 一支 意志 抑制 以致 以至 已知基础 几处 挤出 击出 积储 寄出 鸡雏 几出得到 得道 德岛 的道进入 浸入对于孩子 海子 海滋过去不过 补过提高百科 拜客 百克 柏科部门一切那些 哪些最大获得 和的 活得 活的 火的旅游觉得理论 立论达到 大道 打倒 答道 大刀 大岛 大盗 打到 大到任务 人物 人武 壬午突然 徒然可是 科室 可视 刻石 课时 刻蚀 克什 可使不知 布置 不止 不致 不值 不支 不只 不至不要 补药资本位于 尾羽 未愈 谓语 微雨 维语 位与任何 仁和 人和投资 骰子 头子一下 以下保护艺术 一束 遗书 医术 医书 一数 遗属 一书于是 玉石 御史 预示 遇事 浴室 余实 喻示 谕示 鱼市学习 学系 血洗合作科学不敢 不甘人大个人 各人设计 涉及 社稷 射击 拾级分布 分部 分步部队 不对信息 欣喜 心细 心系 心溪引起 阴气 银器 饮泣 因其其实 气势 骑士 其时 启示 歧视 七十 起始 起事 奇事不仅 不禁 不尽 步进 不进价格 加哥地位 地委 帝位 低微 低位 敌伪转 专 砖 赚 撰 専 転 篆 馔 堟 传 孨 沌 湍 簨拽 转法国穿 传 船 川 喘 串 踹 椽 舛 氚 钏比赛 鼻塞规模分析不到 布道 步道 不倒铁路 铁炉黄 皇 慌 晃 荒 凰 惶 煌 潢 蝗 磺 簧 恍 谎 幌 衁 锽 皝 愰 湟 璜 遑 徨 櫎 肓百度 摆渡 拜读 败毒告诉 高速 缟素光 广 胱 広 逛 侊 咣 潢 垙 洸处理 出力 矗立 畜力 処理本级 本纪 苯基 本季办法 颁发心里 心理 心力 新立下去 辖区以来 依赖 一来 倚赖今日 近日汽车 骑车而是 二十 二世 儿时 耳饰 而使 二是敌人事业 失业 实业 视野 师爷 是夜 试液 石叶 是也开发 开発出去 除去注意 主意 主义 逐一 竹椅 属意机会 集会 忌讳 击毁 几回 际会父亲 抚琴此外这次采取干部印度 阴毒 引渡如今大会德国 得过法规一位 以为 一味 意味 移位 依偎 异味 一尾 一维 异位迅速飞机 斐济矿 狂 匡 筐 况 旷 框 眶 劻 呈 诳 诓 兄 哐 狅 逛回答设立 舍利 猞猁 社里扩大 阔大考虑自由 自有 自幼率 摔 甩 衰 帅 蟀附近 福晋 斧斤 福金 富锦师父 师傅 诗赋 市府 石斧 十幅 食府 弑父结合 结核 界河 接合古代三个此时 此事 刺史 磁石 辞世 瓷实物质 无知 五指 武职 五只 五支 无职 武陟 无止然而很大女人货币母亲 木琴安排除了 出了植物 职务 织物 支吾 治污 之物二人书记 书籍 庶几 熟记 数集 枢机 数计语言 预言 寓言 雨燕 预演 预研 鱼眼 鱼盐忽然恢复 回复离开队伍因素 音速 音素尤其 油漆 油气 右旗 游憩 忧戚 由其 有其机械 记协 基耶参与 残余 参预特殊居民内部决Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
没有 煤油国家发展什么 甚么主要地方 敌方 提防 堤防已经 一经 意境 易经 遗精 一惊经济 竞技 荆棘 经纪 经籍 京畿 静寂 径迹 惊悸 経済这些公司 公私人民社会知道 指导 直到 制导 执导 直捣 直道 之道开始 开时 开市 开释 揩拭 开式美国因为 音位 淫威研究 烟酒文化 文华 问话世界 使节 时节 石阶 十届 师姐 视界 石碣 失节 尸解不能关系 关西 盥洗 関系时候 事后 侍候 狮吼 时侯可能出来认为 人为 人味不同 不通作为 座位 做为 作伪 坐位但是 胆识管理 官吏 惯例 观礼 馆里工业 功业 公爷一定 一顶 议定 一锭 一丁人们发现 法线机关 籍贯 鸡冠 机関 极管虽然包括教育 交与 教谕 交予要求人口 刃口建立 简历 监利 尖利 监理 尖厉 剪力参加 掺假一样 意杨 异样 宜阳 益阳 弋阳 抑扬 颐养面积编辑 遍及 边际 编集之后 滞后系统最后折腰 这么这么东西 洞悉能力革命还有目前方法举行 巨型 矩形 巨星 句型 聚星单位 単位所有资源 自愿提供报告或者 活着下来军事 军师 军士 均势 均是分别十分 时分 失分然后农业 脓液比较价值 加之 茄汁 假肢 甲酯亿元 医院 议员 意愿 一员 一元 译员 议院 遗愿 艺苑有些 友协存在选举有人 游人 诱人 友人 右衽不断 不端咱们直接 枝节 肢解 职介 指节 直截期间 其间 器件 旗舰 起见 七件 齐肩权力 权利 全力 圈里解决结构 解构一点 疑点 医典 椅垫 仪典统一 同意 同一 同义 通义 通译结果 接过后来主任 主人 助人关于 关羽 惯于利用看到 砍刀公里 功力 宫里 公理 公立 功利 公历 公厘 工力 巩俐很多希望 西王新闻 辛温国内 锅内最高集团 基团 几团 急湍回来范围 反胃丰富为主 围住甚么这时 赭石 者是 这事 这是按照目标全部军队左右选择 选択批准支持 指斥 至迟 咫尺 直尺 智齿时代 世代 十代实施 事实 逝世 试试 时时 实事 石狮 史诗 适时 世事只要 制药随着词条 此条 磁条收入 受辱意见 一件 一间 一剑 仪剑 翼尖 异见 一见 一键过来保持 抱持一条 一跳是否报道 宝刀 报导 报到 宝岛消息 小溪 小西 小戏还是 海事 海蚀 海狮 海市安全喜欢根本领域 囹圄联系 练习 怜惜 联席感到 赶到 干道宪法原则人类反对以前 一千 一钱建议 简易 检疫 坚毅 简仪就是 九十 酒食 旧时 旧事 旧式 就势 救世 旧诗 旧识欧洲作品特点资料结束 劫数 借书认识 人士 人事 人世 人氏 人是人数 认输那样 哪样来到产业公路 公鹿人才 人材台湾容易 绒衣联合 连合民主一天双 霜 爽 塽 孀 樉不少人家分为 氛围知识 只是 指示 致使 制式 指使 执事 致仕 直视 志士别人综合 总和出口动物 东吴 动武总理用于 勇于 用语设备股东 鼓动 古董 咕咚 骨董作出 做出措施 错事 错失电子 点子 垫子 癫子 店子 甸子导弹 刀丹 捣蛋行业发表 発表和平监督 建都 简牍一年 翌年 亿年 意念 一念伊宁 一年身体 审题武功 蜈蚣 无功 务工 误工位置 为止 未知 为之 谓之指出 支出 制出 之初 之处考试指挥 智慧 知会 纸灰 只会却是 确实 缺失 确是从而感觉一阵 一针 义诊 一帧 疑阵 一震所谓 所为 缩微 所未这位 者为宣布困难实在 十载 是在某些问道 闻到 问到苏联解释 揭示 届时 结实 结识 街市 结石 借势 节食 碣石男人 难忍当地 荡涤海军外国本来一边 一遍 以便 一变用户 拥护方案 反感一块一片 一篇 亿片 衣片有时 优势 有事 有失 幼时 油饰 由是 诱使 油石 游士装 状 撞 庄 壮 妆 桩 憧 幢文学进来 近来还要 海鹞一面 以免普通 扑通 噗通看着去年图片 涂片大型 大兴 大姓 大幸 大刑带来较大 交大看来若干食品 视频 饰品坐在西方第一次导致 倒置 到职讨论制造 织造老师 老实 老式 老是担任 单人连续运输看看 侃侃真的 贞德 镇的音乐 隐约难道 南岛 难倒接着 借着大臣身子 婶子 身姿 深紫回到 回道俄罗斯地面 底面 涤棉 抵免未来之下 直辖里面 立面数学 输血 腧穴出版 初版南北亚洲 牙周 压轴大小 大笑 打消 大校实验 试验 十堰 食盐 誓言 饰演 失言 食言 试演 石盐样子 养子 阳子 扬子 秧子本报之外蒙古 梦姑只有 挚友 质优 之忧 之有 之又留下 流下研制 胭脂 腌制 延至 阏氏 言志 延滞 言之 颜值东部愿意 原意 园艺 原义 怨艾公布 工部 弓步只好 志豪 治好化学 滑雪儿童 而同矛盾 茅盾规划 桂花 鬼话 归化分配全体统计 同级 通缉 同济 痛击 同机体现 提现名字 名子不了 不料 布料最近从此普遍攻击 供给 功绩 共计 公鸡 公祭 公积 共济条例 调理 条理经历 经理 精力 敬礼 警力 晶Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
工作进行 金星 尽兴 锦兴这样 遮阳全国通过 铜锅北京 背景 贝京其中 器重 七种 起重 期中 器中现在 先在时间 事件 实践 始建 世间 识见 诗笺 尸检 十件 时艰代表决定 绝顶领导 领到一种 一中 倚重 异种 意中 一重 一众石首 尸首 石兽 失守 失手 实收 十首同时 同事 通史 通式 筒式 痛失 同室学院 学员 血缘 学苑 雪原 学园两个活动建设出现 出线 出险 滁县之间 只见 指尖 质检 纸笺 质监 制件以上 衣裳 椅上规定发生 发声 発生使用 适用 食用 实用 试用 施用 是用政府 征服 正副 正负 整复 整幅 征夫产品各种作用皇帝 黄帝 荒地说道 数刀 说到应该有关 攸关 油管 油罐组成政体 整体 正题 正体人员 人缘 人愿 人猿表示 镖师 标示当时 当事 党史运动学校方式 方始 方士 房事 房室 房市经过专业 转业准备增加一声 医生 一生 医圣 易生 益生今天完全 万全内容实行 施行 食性 试行 时兴 世行 石星 诗兴 始兴 十行思想 四项 四乡 思乡事情 实情 世情 诗情 石青 十顷实现 事先 视线 失陷 市县 时限 时鲜 诗仙 实线 是先甚至 深知 神智 神志 神祗 伸直 神职 深挚形式 行使 形势 行事 刑事 行驶 型式 姓氏 幸事 行时原来变化 変化政策年代执行 知性 直行 置行 之星 之行 知行 质性建筑 见诸 箭竹 笺注能够自治区成立 城里 成例英国 颖果先进 现金 现今制定 指定 制订项目 橡木当然超过 炒锅原因 援引 元音公民采用重大 中大 肿大农民整个了解 了结伸腰 甚么劳动 労働控制 空智 空置 空值农村受到 收到 首道眼睛 燕京 眼镜 盐井统治 同志 通知 同治 统制 同知 通志 同质 铜质 铜制每年明白作战进一步终于 忠于 中雨 重于大量 打量 大梁多少来说接受 接收 接手 解手 界首 截收另外坚持 减持工人 公认 公人 供认说话改变 改编先后力量看见 坎肩战略今年 近年程度 成都 诚笃平均经验 精研 井盐 精盐 景炎 惊艳 経験兄弟阶段 截断 戒断着名 这名集中 几种 击中 机种 冀中 几重 计重朋友召开材料帮助 帮主委员 威远现代 先代行为 兴味 腥味 性味介绍胜利 生理 省里 省力 省立 生力姑娘家庭之前 值钱 制钱 纸钱 致歉 支前 指前 直前更加长期 唱起 长崎并且仍然拥有 用油 用友清楚 清除 清初稳定 问鼎 文定电话 点化 电化 点画网络 网罗调查开放 开方展开 绽开小时 消失 小事 小史 消逝 硝石 消释 小视 消食 小室平民完善 万山性质 形制 兴致 行至 行止 行之逐渐 主见 竹简 铸件 住建训练机场 几场 饥肠 鸡场银行 引吭 引航治疗 质料反应 反映 帆影找到见到 剪刀 尖刀万元 万円多年怎样生物 圣物南京 难经 南靖真是 真实 阵势 珍视 诊室财产全市 权势 诠释 拳师 全师 全食 全是有效 幼小 有小进攻 进宫 进贡 金工 仅供从事 从师 从实尽管 金冠 进关 近观便是 便士 辨识 砭石简单 简単开展 开战显示 现实 县市 先是 先师 现时 现世 西安市 闲时 闲事确定教师 教室 教士 礁石 校释 矫饰竟然 井然每天 煤田文明 闻名 问明 文名放在 防灾职权 治权对方 堆放金融商业 上野 上也只能 职能 智能天下境内 颈内肯定成绩 乘机 乘积 承继 城际总是 宗室 纵使 宗师 总师东北战斗 战抖适应 石英 失迎 实蝇 侍应 时应 市盈面对类型培养明确一场 宜昌 异常至少 枝梢特征 特徴周围 州委一张 仪仗 议长 一丈 一章 依仗 倚仗 亿张 一掌相互部长 补涨 步长 不长三年刚才 钢材程序 乘虚 称许适当 失当省级 升级 胜迹 生机 生计 省籍 省际 胜绩空军检查 检察 监察 検查本身高兴美元 美院 美圆 梅园长安 昌安掌握天然中部听到更是 更始全球关注 灌注 管住 贯注职工 织工 之功消费 小费 笑非想起 响起 香气 象棋 响器 向其条约 跳跃公开限制 闲置 先知 县志 现职 闲职 现址 现值武昌 无偿 无常 五场 五常 舞场 武场太阳广大 光大 广达很快交流显然撤销 撤消 车削一部分地上 堤上效果 小国 効果倘若纺织 防止 防治 放置 仿制 方志 方知常务 长屋加工 夹攻两侧 良策 两册大部分 大部份解放 街坊 借方电视 殿试 电势 电石 点时 点是天津各项 各乡一系列外交 外教日常令人推动昨天认真 人阵大声 大圣 大胜 大生生于 生育 剩余 声誉 盛誉 圣谕 乘舆明代天门任免 人面不想 不祥 不详 不相 不像互相 湖湘眼前概念来源降低 江底 江堤发布会小姐 小节 消解 小街 小结北平 被评这件同学那种 哪种当下判断后面文件 稳健 闻见丈夫 涨幅东南改善少数飞行 非行百姓 败兴投票相比 想必 响鼻运用行者面临流通协调 Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
中国这种 折衷 折中 浙中重要 中药 钟繇成为 称为 称谓生活 圣火 生火学生方面 放免市场 时常 失常 时长 视场 十场 视唱城市 乘势 诚实 程式 成事 呈示政治 整治 争执 政制 正值 正直 正职 整只 整支中心 重心 忠心 衷心 中信 众心 众信 中新武汉市过程 郭城群众条件 挑拣环境 幻境 幻景上海 伤害 商海完成 宛城非常表现 标线心中 新种 信众 信中水平 水瓶精神 精深 净身 敬神荆州专家 转嫁加强 夹墙交通 绞痛之中 制种共同 共通 珙桐严重 眼中 言中 言重声音发言人商品 上品标准斗争造成众人 重任 中人 种仁全面正是 正式 证实 政事 正视 正事 正史 正室 正始 争食明显 明线首先 受限 寿县 寿险 寿限行动保证 暴政 包拯应用 英勇市长 师长 十丈 诗章 室长 十张 十章官员 馆员专门 専门说明中学重新 宠信 崇信广泛功能质量命令 明令面前 棉签同样 痛痒当年青年平原 平远经营 精英 晶莹往往 望望 汪汪 旺旺 网网教授 交手 交售 交收 脚手减少考生多种心想 信箱 新乡 馨香充分又称 有成 游程手段 首段数量相信 向心公元 公园 贡院 宫院文章 蚊帐封建 讽谏总统相对应当构成计算机曾经保障 暴涨 保长 报章 暴胀分钟主张 助长 拄杖财政正确销售 小手 消瘦 消受 枭首 小兽等等重视 忠实 中式 中时 中士 中实 中视 中师 中试 中世良好 两号最终 最重航空宗教健康 建康将军粮食 良师 两市听说好像 好象晚上 腕上 玩赏贡献 攻陷 弓弦 巩县 供献 共线想到 向导 响导关键 管见 管件是不是 时不时身边 申辩加上 架上品种空间 控件小说始终 适中 时钟 示众 十种 失重 试种 诗中 市中 式中观点上述 尚书 上书朝廷表明 标明欢迎 幻影强烈正在前面江南种类年轻 年青电影平等山东 山洞 闪动 煽动 扇动表面下降 下江 峡江网站成果 城郭紧张 进账众多高中 告终城楼软件 软坚刚刚 杠杠武装永远 永元年间 年鉴 年检元年对象 対象听见 停建 梃击案朝鲜 超限 巢县充满轻轻 青青 卿卿 倾情 清清校名 小命 小名 效命 小明小龙伸手 深受 身受 身手卫生 为生 尾声 微升 威盛 维生成本公共 公公 共工生态人生 人声 认生方针 仿真 方阵 防震承认 成人 成仁性命 姓名 刑名院校 远销 元宵成分 成份完整 顽症观念营养 鹰扬 鹰洋承担 程弹原料风险 奉献 锋线 丰县 奉贤 缝线 凤县少年东方 洞房平衡上来相反 襄樊明朝年龄性能尚未 上尉 上位王朝宫廷 宫庭员工成熟 成书 成数 乘数旁边方便全身两位 两委 两味 两尾 量为转化大多数成就交换 叫唤 交还 交欢渐渐 见见明清走向 奏响之上 智商 至上 致伤 纸上生存典型 电性优良 油亮 有两国家级占领行情某种全年博物馆签订 签定明天两者 两折水产剩下 盛夏 生下海上改称 改成 该城 改乘上市 伤势 赏识 上士 商事 伤逝 上式 上是之所以远远 圆圆 渊源 源源 远缘 远源同年 童年皇后这场投降 投向 头像分享 焚香 分项黄金 黄巾种植 终止 中指 种质 中止 中直 中职 中之动手抗战浙江 这将家长头上风景人民币所在地官兵称号 程颢广告含量 寒凉当选注重潜艇 前厅 前庭航线申请 神情 深情忍不住商人 上任 伤人将来想着 向着杭州制成 支撑 职称 织成 支承 至诚 指称 枝城 之称 之城深圳 神针推广省内科学家授权 受权享有 香油 向右执政 至正 指正 指证 之争校园 小院 小原黄石 皇室长沙政协 正邪新疆 新江 信江 新绛汉白玉正好联盟储量 储粮情形 清醒 轻型 庆幸 情性供应 恭迎 公营 公映 公英 共赢挑战进程 进城 近程 金城 进呈 晋城 禁城 津城 锦城发动机第二天资本家事项 石像 试想 驶向 识相 十项 实像 石向 是想初中 初衷 出众两只 两支 良知 两枝 量值讲话 僵化 江华差不多吴三桂东京 动静 东经前往 潜望影片场所房间 放箭 坊间正门中华 中化 种花景点 经典 静电 精典乾隆当前当真扩张选手将士 僵尸 讲师 匠师 江市 将使 将是像是 象是 相识 乡试 相视 翔实 详实 相士 箱式尊重安装命名 明明传来照片意味着胸口民政基督教长老分成 纷呈能源转过 朱安国冷笑攻关 公关 公馆 宫观 共管投资者见面 减免只不过尽量 斤两反正城门兴建城内上下争夺名叫 明教 鸣叫 名教 明胶水面 睡眠乡村明星车程 车城防空 防控 放空 方孔效应 小鹰 小影宫殿 供电义和团走上整顿示范区连忙印象 音响 音像 引向 音箱缓缓 换换 环环会上 毁伤 会商 徽商聪明 从命平面澳大利亚表情诞生概况 该矿瞧瞧 悄悄 敲敲正要 政要想要所长眼光 验光庆典 清点 轻点神经 Line truncated
|
||||
@@ -0,0 +1 @@
|
||||
天安门生产 盛产情况 轻狂形成 行程 兴城 兴澄影响 影像 映象 影象 映像 应向行政增长产生工程 宫城 恭城 攻城中央 中阳 种养国务院战争先生 险胜 先声 先圣 显圣 线绳襄阳 向阳 像样全省 全胜 全盛重点 终点 钟点 中点 中电 重典 中甸相关 乡官传统 串通身上 神伤成功城邦为什么真正相同 相通现象 显像 线香 县乡 仙乡毛泽东直辖市调整脸上通常 通畅 同场方向 芳香香港越来越状态装备经常外交部生命 声明 声名 盛名 圣明手中 受众 首重创造相当 乡党变成 编成 编程 边城 辩称中间 中建 中坚 重剑 重见证明 正名 争鸣 挣命院长 园长创作强调 腔调建成 简称 见称 坚城 兼程 坚称竞争政权 证券 争权自治州广州 光州李自成名称 名城产量 产粮英雄招生相应 响应 项英 相映上面形象 形相 星象 星相新华社宣传 旋转成员 城垣 乘员创新空中率领矿产增强广东村委会现场 纤长自治县校长 小张 嚣张 消长江陵 将领 将令两年战场 站场崇祯 重振 崇桢装置 壮志重庆 崇庆转变劳动力重建工厂 工场阳光 仰光传说原种 院中 园中毕业生点亮 掂量 电量转身亿美元 一美元研究所中共 重工十堰市 实验室 试验室周恩来向前 镶嵌联合国公众 宫中 工种观众 关中 管仲 罐中黄冈 皇岗宋江 松江中原 中远 中院 中元 众院享受 相手县长 宪章能量武昌区常见 长剑战斗机总量网上 往上临床政党 正当 整党 争当沉重两天 良田 粮田受伤 手上 受赏共和国有没有 又没有倾向 清香 清乡战胜怎么样当中 当众流通股桌上 灼伤两条常用旅行社城镇水中 水肿 税种创办 床板主持人没什么京城 精诚蛋白质光荣上年庄严双眼相连 项链 相联 湘莲 相恋老太太王琦瑶全长 全场 全厂州长这时候漂亮侵略者面向 面相国内外两名装甲 庄稼 庄家 装假工匠十八年光芒行省 兴盛 形声十五年呈现 成仙 成县 呈献 称羡 城县桥梁风光开创 开窗张无忌老人家团长生效 生肖工商 共商 工伤正面统帅 统率上前 赏钱 上千世界杯东南亚转换淡水鱼两边 两遍 量变装饰 壮士 壮实 妆饰中等 重登场面 长眠人口数黄州主席团登上图书馆屈家岭冰川 兵船经济学相等山上天鹅洲县城 现成 西安城 县丞 线程终身 终审勉强手掌 首长 手杖 首张农作物承受皇宫解放区内蒙古中纺 中方 中放疯狂少将无论如何联想 脸相卖国贼公正 公证 工整几十年膨胀 篷帐凤凰平常古建筑联合会灯光少量笔架山国防部转让打电话东南部乡镇干什么长官 掌管大别山畅销 长啸 长效社会学生动身穿产业化反革命见长 建厂 碱厂 建昌 检场天上矿山地下水巴基斯坦相见 相间 想见 详见 乡间 响箭怀中有时候政变 争辩 整编 正编二十年擅长 山场江山当场光明 广明景象 竞相 径向 颈项 镜像 敬香 井巷天然气向往 相望 襄王 想望 项王战斗力摇摇头盛行 生性梦想 梦乡少林寺县级市荆江 靖江两面 粮棉如果说专线窗口 创口 疮口黄依依变量 汴梁从中 丛中 从重 从众小声 笑声 小生 啸声 箫声 消声出版社办事处中东建筑业音乐堂白嘉轩窗外方程 方城 防城 方成建筑物坚强成效 承销廷杖 庭长 厅长 艇长 亭长石破天混凝土中山 钟山座谈会工业化总书记容量通称 统称 通城 桐城 铜城太和殿尽可能转动生平 升平着重装有上层上空编辑者首相 受降 手相改装神圣镇长印度洋伤亡 上网 商王学院路幻想 还乡 幻象 换向向东 响动 湘东自行车小孩子中年 终年刘少奇南环路专用 转用接下来数学家红墙 哄抢维吾尔族两层远程科学院面上 面商充当 冲荡真相 真象 震响 真想村庄两旁进出口来源于降水 江水 浆水正桥 正巧皇权 黄泉所有者两院 两员 良缘 两元自动化东北部从来不参议院 参议员着称通商 同上橡胶 相交 香蕉 相较小伙子率先冲动金水河较量哲学家场景总长 纵长 总帐相公衡量 横梁 桁梁 恒量隆重 隆中 龙种 龙钟中断 中段 终端包装房中江淮周转巴勒斯坦征收 正手名胜 名声 鸣声商店万千瓦匈牙利元帅整天杜鹃花叫声定向 丁香 定襄轰炸机传授 船首通向 同乡 铜像 同向 桐乡顾秋水胸前清江生前 升迁 省钱一院制决不能 绝不能明亮四人帮方丈上山 尚善叶莲子江青 讲清 讲情料想郑州段祺瑞不好意思英格兰马来西亚长远 场院 长垣养成 阳城 羊城 扬程 杨成 佯称光线 光纤 光鲜外国人潜江 黔江强行是因为抽象所有人王夫人 王辅仁江面工作日守城 收成 守成襄州强劲碰上驱逐舰集团军连声 连胜 连生十七年站长 毡帐中密度新华门中洲 中州 中轴贾志杰城郊 成Line truncated
|
||||
@@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2013 Sun Junyi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1,201 @@
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,9 @@
|
||||
# 输入操作图标
|
||||
|
||||
原稿来自 iconfont.cn 的公开搜索,保留每个图标的原始 SVG。图标 ID、作者/集合 ID、原稿哈希、对应上游固定版本 URL 和哈希见 `icons.json`。
|
||||
|
||||
选用 Remix Icon v4.6.0 的对应图形。已将 iconfont 原稿与固定版本的上游 SVG 以相同 512px 画布渲染,比较 alpha 通道;平均差异均小于 0.001(缩放坐标的小数舍入)。没有将搜索结果中仅名称相似的图标当作相同图形。上游许可为 Apache-2.0,完整许可见 `LICENSE`。
|
||||
|
||||
Glyphix 官方 Image 文档列出的格式为 PNG/JPEG,未承诺 SVG 解码。运行包使用由原稿生成的 72px 透明 PNG,显示为 20/24px;原始 SVG 和上游 SVG 保留在此目录。执行 `python scripts/build-icons.py` 可重建(主机需 `resvg-py`),常规构建直接使用已生成资源,无需联网。
|
||||
|
||||
颜色统一为蓝色 #2867D9、退格深灰 #515866、完成白色 #FFFFFF。图标位于原生 Button 中,触控区由按钮布局决定。
|
||||
@@ -0,0 +1 @@
|
||||
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M512 561.962667l211.2-211.2 60.330667 60.373333L512 682.666667 240.469333 411.136 300.8 350.805333l211.2 211.2z" fill="#000000" /></svg>
|
||||
|
之后 宽度: | 高度: | 大小: 327 B |
@@ -0,0 +1 @@
|
||||
<svg viewBox="0 0 24 24" fill="currentColor" xmlns="http://www.w3.org/2000/svg"><path d="M11.9999 13.1714L16.9497 8.22168L18.3639 9.63589L11.9999 15.9999L5.63599 9.63589L7.0502 8.22168L11.9999 13.1714Z"/></svg>
|
||||
|
之后 宽度: | 高度: | 大小: 210 B |
@@ -0,0 +1 @@
|
||||
<svg class="icon" style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M461.994667 512l211.2 211.2-60.330667 60.373333L341.333333 512l271.530667-271.530667 60.330667 60.330667-211.2 211.2z" fill="#000000" /></svg>
|
||||
|
之后 宽度: | 高度: | 大小: 333 B |