mirror of
https://github.com/crazywhalecc/quick-shell.git
synced 2026-03-17 20:34:52 +08:00
Initial commit
This commit is contained in:
commit
fe8d9ed81b
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
.idea/
|
||||||
|
/vendor/
|
||||||
|
zm.json
|
||||||
|
/zm_data/
|
||||||
|
composer.lock
|
||||||
|
.DS_Store
|
||||||
|
/runtime/
|
||||||
201
LICENSE
Normal file
201
LICENSE
Normal file
@ -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.
|
||||||
32
README.md
Normal file
32
README.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# quick-shell
|
||||||
|
|
||||||
|
一个通过 `curl`、管道、`bash` 实现的快速执行常用命令的工具,不在本地保存脚本。
|
||||||
|
|
||||||
|
比如想随时随地不安装使用 neofetch,直接执行以下一行命令:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -s http://shell.zhamao.xin/run/neofetch | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
## 用法
|
||||||
|
```bash
|
||||||
|
# 根 URI 会返回一个帮助菜单,包含了所有可以快速执行的命令
|
||||||
|
curl -s http://shell.zhamao.xin
|
||||||
|
|
||||||
|
# /run 节点可以使用管道执行一个命令,如果命令不存在,则返回一个 echo 语句,避免报错,但做到了命令不存在的提示功能
|
||||||
|
curl -s http://shell.zhamao.xin/run/{name} | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
## 支持的快速命令
|
||||||
|
|
||||||
|
| 名称 | 说明 |
|
||||||
|
| ---- | ---- |
|
||||||
|
| `brew-update` | 执行 Homebrew 更新(测试通断用) |
|
||||||
|
| `neofetch` | 执行 neofetch |
|
||||||
|
| ... | 持续更新中 |
|
||||||
|
|
||||||
|
## 贡献
|
||||||
|
|
||||||
|
如果你觉得有常用的命令,可以提交到这个项目中,我会尽快添加到这个项目中。
|
||||||
|
|
||||||
|
目前这个项目目前只是自己用,如果觉得不好,请提出指导性意见!
|
||||||
29
composer.json
Normal file
29
composer.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"name": "crazywhalecc/quick-shell",
|
||||||
|
"description": "Run Shell Scripts as Fast as Possible",
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"type": "project",
|
||||||
|
"prefer-stable": true,
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.4",
|
||||||
|
"zhamao/framework": "^2.4",
|
||||||
|
"ext-json": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"swoole/ide-helper": "@dev"
|
||||||
|
},
|
||||||
|
"scripts": {
|
||||||
|
"post-create-project-cmd": "vendor/bin/start init",
|
||||||
|
"post-update-cmd": "vendor/bin/start check:config"
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"QuickShell\\": "src/QuickShell"
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"src/QuickShell/global_function.php"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
29
config/console_color.json
Normal file
29
config/console_color.json
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"default": {
|
||||||
|
"success": "green",
|
||||||
|
"info": "lightblue",
|
||||||
|
"warning": "yellow",
|
||||||
|
"error": "red",
|
||||||
|
"verbose": "blue",
|
||||||
|
"debug": "gray",
|
||||||
|
"trace": "gray"
|
||||||
|
},
|
||||||
|
"white-term": {
|
||||||
|
"success": "green",
|
||||||
|
"info": "",
|
||||||
|
"warning": "yellow",
|
||||||
|
"error": "red",
|
||||||
|
"verbose": "blue",
|
||||||
|
"debug": "gray",
|
||||||
|
"trace": "gray"
|
||||||
|
},
|
||||||
|
"no-color": {
|
||||||
|
"success": "",
|
||||||
|
"info": "",
|
||||||
|
"warning": "",
|
||||||
|
"error": "",
|
||||||
|
"verbose": "",
|
||||||
|
"debug": "",
|
||||||
|
"trace": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
987
config/file_header.json
Normal file
987
config/file_header.json
Normal file
@ -0,0 +1,987 @@
|
|||||||
|
{
|
||||||
|
"ez": "application/andrew-inset",
|
||||||
|
"aw": "application/applixware",
|
||||||
|
"atom": "application/atom+xml",
|
||||||
|
"atomcat": "application/atomcat+xml",
|
||||||
|
"atomsvc": "application/atomsvc+xml",
|
||||||
|
"ccxml": "application/ccxml+xml",
|
||||||
|
"cdmia": "application/cdmi-capability",
|
||||||
|
"cdmic": "application/cdmi-container",
|
||||||
|
"cdmid": "application/cdmi-domain",
|
||||||
|
"cdmio": "application/cdmi-object",
|
||||||
|
"cdmiq": "application/cdmi-queue",
|
||||||
|
"cu": "application/cu-seeme",
|
||||||
|
"davmount": "application/davmount+xml",
|
||||||
|
"dbk": "application/docbook+xml",
|
||||||
|
"dssc": "application/dssc+der",
|
||||||
|
"xdssc": "application/dssc+xml",
|
||||||
|
"ecma": "application/ecmascript",
|
||||||
|
"emma": "application/emma+xml",
|
||||||
|
"epub": "application/epub+zip",
|
||||||
|
"exi": "application/exi",
|
||||||
|
"pfr": "application/font-tdpfr",
|
||||||
|
"gml": "application/gml+xml",
|
||||||
|
"gpx": "application/gpx+xml",
|
||||||
|
"gxf": "application/gxf",
|
||||||
|
"stk": "application/hyperstudio",
|
||||||
|
"ink": "application/inkml+xml",
|
||||||
|
"inkml": "application/inkml+xml",
|
||||||
|
"ipfix": "application/ipfix",
|
||||||
|
"jar": "application/java-archive",
|
||||||
|
"ser": "application/java-serialized-object",
|
||||||
|
"class": "application/java-vm",
|
||||||
|
"js": "application/javascript",
|
||||||
|
"json": "application/json",
|
||||||
|
"jsonml": "application/jsonml+json",
|
||||||
|
"lostxml": "application/lost+xml",
|
||||||
|
"hqx": "application/mac-binhex40",
|
||||||
|
"cpt": "application/mac-compactpro",
|
||||||
|
"mads": "application/mads+xml",
|
||||||
|
"mrc": "application/marc",
|
||||||
|
"mrcx": "application/marcxml+xml",
|
||||||
|
"ma": "application/mathematica",
|
||||||
|
"nb": "application/mathematica",
|
||||||
|
"mb": "application/mathematica",
|
||||||
|
"mathml": "application/mathml+xml",
|
||||||
|
"mbox": "application/mbox",
|
||||||
|
"mscml": "application/mediaservercontrol+xml",
|
||||||
|
"metalink": "application/metalink+xml",
|
||||||
|
"meta4": "application/metalink4+xml",
|
||||||
|
"mets": "application/mets+xml",
|
||||||
|
"mods": "application/mods+xml",
|
||||||
|
"m21": "application/mp21",
|
||||||
|
"mp21": "application/mp21",
|
||||||
|
"mp4s": "application/mp4",
|
||||||
|
"doc": "application/msword",
|
||||||
|
"dot": "application/msword",
|
||||||
|
"mxf": "application/mxf",
|
||||||
|
"bin": "application/octet-stream",
|
||||||
|
"dms": "application/octet-stream",
|
||||||
|
"lrf": "application/octet-stream",
|
||||||
|
"mar": "application/octet-stream",
|
||||||
|
"so": "application/octet-stream",
|
||||||
|
"dist": "application/octet-stream",
|
||||||
|
"distz": "application/octet-stream",
|
||||||
|
"pkg": "application/octet-stream",
|
||||||
|
"bpk": "application/octet-stream",
|
||||||
|
"dump": "application/octet-stream",
|
||||||
|
"elc": "application/octet-stream",
|
||||||
|
"deploy": "application/octet-stream",
|
||||||
|
"oda": "application/oda",
|
||||||
|
"opf": "application/oebps-package+xml",
|
||||||
|
"ogx": "application/ogg",
|
||||||
|
"omdoc": "application/omdoc+xml",
|
||||||
|
"onetoc": "application/onenote",
|
||||||
|
"onetoc2": "application/onenote",
|
||||||
|
"onetmp": "application/onenote",
|
||||||
|
"onepkg": "application/onenote",
|
||||||
|
"oxps": "application/oxps",
|
||||||
|
"xer": "application/patch-ops-error+xml",
|
||||||
|
"pdf": "application/pdf",
|
||||||
|
"pgp": "application/pgp-encrypted",
|
||||||
|
"asc": "application/pgp-signature",
|
||||||
|
"sig": "application/pgp-signature",
|
||||||
|
"prf": "application/pics-rules",
|
||||||
|
"p10": "application/pkcs10",
|
||||||
|
"p7m": "application/pkcs7-mime",
|
||||||
|
"p7c": "application/pkcs7-mime",
|
||||||
|
"p7s": "application/pkcs7-signature",
|
||||||
|
"p8": "application/pkcs8",
|
||||||
|
"ac": "application/pkix-attr-cert",
|
||||||
|
"cer": "application/pkix-cert",
|
||||||
|
"crl": "application/pkix-crl",
|
||||||
|
"pkipath": "application/pkix-pkipath",
|
||||||
|
"pki": "application/pkixcmp",
|
||||||
|
"pls": "application/pls+xml",
|
||||||
|
"ai": "application/postscript",
|
||||||
|
"eps": "application/postscript",
|
||||||
|
"ps": "application/postscript",
|
||||||
|
"cww": "application/prs.cww",
|
||||||
|
"pskcxml": "application/pskc+xml",
|
||||||
|
"rdf": "application/rdf+xml",
|
||||||
|
"rif": "application/reginfo+xml",
|
||||||
|
"rnc": "application/relax-ng-compact-syntax",
|
||||||
|
"rl": "application/resource-lists+xml",
|
||||||
|
"rld": "application/resource-lists-diff+xml",
|
||||||
|
"rs": "application/rls-services+xml",
|
||||||
|
"gbr": "application/rpki-ghostbusters",
|
||||||
|
"mft": "application/rpki-manifest",
|
||||||
|
"roa": "application/rpki-roa",
|
||||||
|
"rsd": "application/rsd+xml",
|
||||||
|
"rss": "application/rss+xml",
|
||||||
|
"rtf": "application/rtf",
|
||||||
|
"sbml": "application/sbml+xml",
|
||||||
|
"scq": "application/scvp-cv-request",
|
||||||
|
"scs": "application/scvp-cv-response",
|
||||||
|
"spq": "application/scvp-vp-request",
|
||||||
|
"spp": "application/scvp-vp-response",
|
||||||
|
"sdp": "application/sdp",
|
||||||
|
"setpay": "application/set-payment-initiation",
|
||||||
|
"setreg": "application/set-registration-initiation",
|
||||||
|
"shf": "application/shf+xml",
|
||||||
|
"smi": "application/smil+xml",
|
||||||
|
"smil": "application/smil+xml",
|
||||||
|
"rq": "application/sparql-query",
|
||||||
|
"srx": "application/sparql-results+xml",
|
||||||
|
"gram": "application/srgs",
|
||||||
|
"grxml": "application/srgs+xml",
|
||||||
|
"sru": "application/sru+xml",
|
||||||
|
"ssdl": "application/ssdl+xml",
|
||||||
|
"ssml": "application/ssml+xml",
|
||||||
|
"tei": "application/tei+xml",
|
||||||
|
"teicorpus": "application/tei+xml",
|
||||||
|
"tfi": "application/thraud+xml",
|
||||||
|
"tsd": "application/timestamped-data",
|
||||||
|
"plb": "application/vnd.3gpp.pic-bw-large",
|
||||||
|
"psb": "application/vnd.3gpp.pic-bw-small",
|
||||||
|
"pvb": "application/vnd.3gpp.pic-bw-var",
|
||||||
|
"tcap": "application/vnd.3gpp2.tcap",
|
||||||
|
"pwn": "application/vnd.3m.post-it-notes",
|
||||||
|
"aso": "application/vnd.accpac.simply.aso",
|
||||||
|
"imp": "application/vnd.accpac.simply.imp",
|
||||||
|
"acu": "application/vnd.acucobol",
|
||||||
|
"atc": "application/vnd.acucorp",
|
||||||
|
"acutc": "application/vnd.acucorp",
|
||||||
|
"air": "application/vnd.adobe.air-application-installer-package+zip",
|
||||||
|
"fcdt": "application/vnd.adobe.formscentral.fcdt",
|
||||||
|
"fxp": "application/vnd.adobe.fxp",
|
||||||
|
"fxpl": "application/vnd.adobe.fxp",
|
||||||
|
"xdp": "application/vnd.adobe.xdp+xml",
|
||||||
|
"xfdf": "application/vnd.adobe.xfdf",
|
||||||
|
"ahead": "application/vnd.ahead.space",
|
||||||
|
"azf": "application/vnd.airzip.filesecure.azf",
|
||||||
|
"azs": "application/vnd.airzip.filesecure.azs",
|
||||||
|
"azw": "application/vnd.amazon.ebook",
|
||||||
|
"acc": "application/vnd.americandynamics.acc",
|
||||||
|
"ami": "application/vnd.amiga.ami",
|
||||||
|
"apk": "application/vnd.android.package-archive",
|
||||||
|
"cii": "application/vnd.anser-web-certificate-issue-initiation",
|
||||||
|
"fti": "application/vnd.anser-web-funds-transfer-initiation",
|
||||||
|
"atx": "application/vnd.antix.game-component",
|
||||||
|
"mpkg": "application/vnd.apple.installer+xml",
|
||||||
|
"m3u8": "application/vnd.apple.mpegurl",
|
||||||
|
"swi": "application/vnd.aristanetworks.swi",
|
||||||
|
"iota": "application/vnd.astraea-software.iota",
|
||||||
|
"aep": "application/vnd.audiograph",
|
||||||
|
"mpm": "application/vnd.blueice.multipass",
|
||||||
|
"bmi": "application/vnd.bmi",
|
||||||
|
"rep": "application/vnd.businessobjects",
|
||||||
|
"cdxml": "application/vnd.chemdraw+xml",
|
||||||
|
"mmd": "application/vnd.chipnuts.karaoke-mmd",
|
||||||
|
"cdy": "application/vnd.cinderella",
|
||||||
|
"cla": "application/vnd.claymore",
|
||||||
|
"rp9": "application/vnd.cloanto.rp9",
|
||||||
|
"c4g": "application/vnd.clonk.c4group",
|
||||||
|
"c4d": "application/vnd.clonk.c4group",
|
||||||
|
"c4f": "application/vnd.clonk.c4group",
|
||||||
|
"c4p": "application/vnd.clonk.c4group",
|
||||||
|
"c4u": "application/vnd.clonk.c4group",
|
||||||
|
"c11amc": "application/vnd.cluetrust.cartomobile-config",
|
||||||
|
"c11amz": "application/vnd.cluetrust.cartomobile-config-pkg",
|
||||||
|
"csp": "application/vnd.commonspace",
|
||||||
|
"cdbcmsg": "application/vnd.contact.cmsg",
|
||||||
|
"cmc": "application/vnd.cosmocaller",
|
||||||
|
"clkx": "application/vnd.crick.clicker",
|
||||||
|
"clkk": "application/vnd.crick.clicker.keyboard",
|
||||||
|
"clkp": "application/vnd.crick.clicker.palette",
|
||||||
|
"clkt": "application/vnd.crick.clicker.template",
|
||||||
|
"clkw": "application/vnd.crick.clicker.wordbank",
|
||||||
|
"wbs": "application/vnd.criticaltools.wbs+xml",
|
||||||
|
"pml": "application/vnd.ctc-posml",
|
||||||
|
"ppd": "application/vnd.cups-ppd",
|
||||||
|
"car": "application/vnd.curl.car",
|
||||||
|
"pcurl": "application/vnd.curl.pcurl",
|
||||||
|
"dart": "application/vnd.dart",
|
||||||
|
"rdz": "application/vnd.data-vision.rdz",
|
||||||
|
"uvf": "application/vnd.dece.data",
|
||||||
|
"uvvf": "application/vnd.dece.data",
|
||||||
|
"uvd": "application/vnd.dece.data",
|
||||||
|
"uvvd": "application/vnd.dece.data",
|
||||||
|
"uvt": "application/vnd.dece.ttml+xml",
|
||||||
|
"uvvt": "application/vnd.dece.ttml+xml",
|
||||||
|
"uvx": "application/vnd.dece.unspecified",
|
||||||
|
"uvvx": "application/vnd.dece.unspecified",
|
||||||
|
"uvz": "application/vnd.dece.zip",
|
||||||
|
"uvvz": "application/vnd.dece.zip",
|
||||||
|
"fe_launch": "application/vnd.denovo.fcselayout-link",
|
||||||
|
"dna": "application/vnd.dna",
|
||||||
|
"mlp": "application/vnd.dolby.mlp",
|
||||||
|
"dpg": "application/vnd.dpgraph",
|
||||||
|
"dfac": "application/vnd.dreamfactory",
|
||||||
|
"kpxx": "application/vnd.ds-keypoint",
|
||||||
|
"ait": "application/vnd.dvb.ait",
|
||||||
|
"svc": "application/vnd.dvb.service",
|
||||||
|
"geo": "application/vnd.dynageo",
|
||||||
|
"mag": "application/vnd.ecowin.chart",
|
||||||
|
"nml": "application/vnd.enliven",
|
||||||
|
"esf": "application/vnd.epson.esf",
|
||||||
|
"msf": "application/vnd.epson.msf",
|
||||||
|
"qam": "application/vnd.epson.quickanime",
|
||||||
|
"slt": "application/vnd.epson.salt",
|
||||||
|
"ssf": "application/vnd.epson.ssf",
|
||||||
|
"es3": "application/vnd.eszigno3+xml",
|
||||||
|
"et3": "application/vnd.eszigno3+xml",
|
||||||
|
"ez2": "application/vnd.ezpix-album",
|
||||||
|
"ez3": "application/vnd.ezpix-package",
|
||||||
|
"fdf": "application/vnd.fdf",
|
||||||
|
"mseed": "application/vnd.fdsn.mseed",
|
||||||
|
"seed": "application/vnd.fdsn.seed",
|
||||||
|
"dataless": "application/vnd.fdsn.seed",
|
||||||
|
"gph": "application/vnd.flographit",
|
||||||
|
"ftc": "application/vnd.fluxtime.clip",
|
||||||
|
"fm": "application/vnd.framemaker",
|
||||||
|
"frame": "application/vnd.framemaker",
|
||||||
|
"maker": "application/vnd.framemaker",
|
||||||
|
"book": "application/vnd.framemaker",
|
||||||
|
"fnc": "application/vnd.frogans.fnc",
|
||||||
|
"ltf": "application/vnd.frogans.ltf",
|
||||||
|
"fsc": "application/vnd.fsc.weblaunch",
|
||||||
|
"oas": "application/vnd.fujitsu.oasys",
|
||||||
|
"oa2": "application/vnd.fujitsu.oasys2",
|
||||||
|
"oa3": "application/vnd.fujitsu.oasys3",
|
||||||
|
"fg5": "application/vnd.fujitsu.oasysgp",
|
||||||
|
"bh2": "application/vnd.fujitsu.oasysprs",
|
||||||
|
"ddd": "application/vnd.fujixerox.ddd",
|
||||||
|
"xdw": "application/vnd.fujixerox.docuworks",
|
||||||
|
"xbd": "application/vnd.fujixerox.docuworks.binder",
|
||||||
|
"fzs": "application/vnd.fuzzysheet",
|
||||||
|
"txd": "application/vnd.genomatix.tuxedo",
|
||||||
|
"ggb": "application/vnd.geogebra.file",
|
||||||
|
"ggt": "application/vnd.geogebra.tool",
|
||||||
|
"gex": "application/vnd.geometry-explorer",
|
||||||
|
"gre": "application/vnd.geometry-explorer",
|
||||||
|
"gxt": "application/vnd.geonext",
|
||||||
|
"g2w": "application/vnd.geoplan",
|
||||||
|
"g3w": "application/vnd.geospace",
|
||||||
|
"gmx": "application/vnd.gmx",
|
||||||
|
"kml": "application/vnd.google-earth.kml+xml",
|
||||||
|
"kmz": "application/vnd.google-earth.kmz",
|
||||||
|
"gqf": "application/vnd.grafeq",
|
||||||
|
"gqs": "application/vnd.grafeq",
|
||||||
|
"gac": "application/vnd.groove-account",
|
||||||
|
"ghf": "application/vnd.groove-help",
|
||||||
|
"gim": "application/vnd.groove-identity-message",
|
||||||
|
"grv": "application/vnd.groove-injector",
|
||||||
|
"gtm": "application/vnd.groove-tool-message",
|
||||||
|
"tpl": "application/vnd.groove-tool-template",
|
||||||
|
"vcg": "application/vnd.groove-vcard",
|
||||||
|
"hal": "application/vnd.hal+xml",
|
||||||
|
"zmm": "application/vnd.handheld-entertainment+xml",
|
||||||
|
"hbci": "application/vnd.hbci",
|
||||||
|
"les": "application/vnd.hhe.lesson-player",
|
||||||
|
"hpgl": "application/vnd.hp-hpgl",
|
||||||
|
"hpid": "application/vnd.hp-hpid",
|
||||||
|
"hps": "application/vnd.hp-hps",
|
||||||
|
"jlt": "application/vnd.hp-jlyt",
|
||||||
|
"pcl": "application/vnd.hp-pcl",
|
||||||
|
"pclxl": "application/vnd.hp-pclxl",
|
||||||
|
"sfd-hdstx": "application/vnd.hydrostatix.sof-data",
|
||||||
|
"mpy": "application/vnd.ibm.minipay",
|
||||||
|
"afp": "application/vnd.ibm.modcap",
|
||||||
|
"listafp": "application/vnd.ibm.modcap",
|
||||||
|
"list3820": "application/vnd.ibm.modcap",
|
||||||
|
"irm": "application/vnd.ibm.rights-management",
|
||||||
|
"sc": "application/vnd.ibm.secure-container",
|
||||||
|
"icc": "application/vnd.iccprofile",
|
||||||
|
"icm": "application/vnd.iccprofile",
|
||||||
|
"igl": "application/vnd.igloader",
|
||||||
|
"ivp": "application/vnd.immervision-ivp",
|
||||||
|
"ivu": "application/vnd.immervision-ivu",
|
||||||
|
"igm": "application/vnd.insors.igm",
|
||||||
|
"xpw": "application/vnd.intercon.formnet",
|
||||||
|
"xpx": "application/vnd.intercon.formnet",
|
||||||
|
"i2g": "application/vnd.intergeo",
|
||||||
|
"qbo": "application/vnd.intu.qbo",
|
||||||
|
"qfx": "application/vnd.intu.qfx",
|
||||||
|
"rcprofile": "application/vnd.ipunplugged.rcprofile",
|
||||||
|
"irp": "application/vnd.irepository.package+xml",
|
||||||
|
"xpr": "application/vnd.is-xpr",
|
||||||
|
"fcs": "application/vnd.isac.fcs",
|
||||||
|
"jam": "application/vnd.jam",
|
||||||
|
"rms": "application/vnd.jcp.javame.midlet-rms",
|
||||||
|
"jisp": "application/vnd.jisp",
|
||||||
|
"joda": "application/vnd.joost.joda-archive",
|
||||||
|
"ktz": "application/vnd.kahootz",
|
||||||
|
"ktr": "application/vnd.kahootz",
|
||||||
|
"karbon": "application/vnd.kde.karbon",
|
||||||
|
"chrt": "application/vnd.kde.kchart",
|
||||||
|
"kfo": "application/vnd.kde.kformula",
|
||||||
|
"flw": "application/vnd.kde.kivio",
|
||||||
|
"kon": "application/vnd.kde.kontour",
|
||||||
|
"kpr": "application/vnd.kde.kpresenter",
|
||||||
|
"kpt": "application/vnd.kde.kpresenter",
|
||||||
|
"ksp": "application/vnd.kde.kspread",
|
||||||
|
"kwd": "application/vnd.kde.kword",
|
||||||
|
"kwt": "application/vnd.kde.kword",
|
||||||
|
"htke": "application/vnd.kenameaapp",
|
||||||
|
"kia": "application/vnd.kidspiration",
|
||||||
|
"kne": "application/vnd.kinar",
|
||||||
|
"knp": "application/vnd.kinar",
|
||||||
|
"skp": "application/vnd.koan",
|
||||||
|
"skd": "application/vnd.koan",
|
||||||
|
"skt": "application/vnd.koan",
|
||||||
|
"skm": "application/vnd.koan",
|
||||||
|
"sse": "application/vnd.kodak-descriptor",
|
||||||
|
"lasxml": "application/vnd.las.las+xml",
|
||||||
|
"lbd": "application/vnd.llamagraphics.life-balance.desktop",
|
||||||
|
"lbe": "application/vnd.llamagraphics.life-balance.exchange+xml",
|
||||||
|
"123": "application/vnd.lotus-1-2-3",
|
||||||
|
"apr": "application/vnd.lotus-approach",
|
||||||
|
"pre": "application/vnd.lotus-freelance",
|
||||||
|
"nsf": "application/vnd.lotus-notes",
|
||||||
|
"org": "application/vnd.lotus-organizer",
|
||||||
|
"scm": "application/vnd.lotus-screencam",
|
||||||
|
"lwp": "application/vnd.lotus-wordpro",
|
||||||
|
"portpkg": "application/vnd.macports.portpkg",
|
||||||
|
"mcd": "application/vnd.mcd",
|
||||||
|
"mc1": "application/vnd.medcalcdata",
|
||||||
|
"cdkey": "application/vnd.mediastation.cdkey",
|
||||||
|
"mwf": "application/vnd.mfer",
|
||||||
|
"mfm": "application/vnd.mfmp",
|
||||||
|
"flo": "application/vnd.micrografx.flo",
|
||||||
|
"igx": "application/vnd.micrografx.igx",
|
||||||
|
"mif": "application/vnd.mif",
|
||||||
|
"daf": "application/vnd.mobius.daf",
|
||||||
|
"dis": "application/vnd.mobius.dis",
|
||||||
|
"mbk": "application/vnd.mobius.mbk",
|
||||||
|
"mqy": "application/vnd.mobius.mqy",
|
||||||
|
"msl": "application/vnd.mobius.msl",
|
||||||
|
"plc": "application/vnd.mobius.plc",
|
||||||
|
"txf": "application/vnd.mobius.txf",
|
||||||
|
"mpn": "application/vnd.mophun.application",
|
||||||
|
"mpc": "application/vnd.mophun.certificate",
|
||||||
|
"xul": "application/vnd.mozilla.xul+xml",
|
||||||
|
"cil": "application/vnd.ms-artgalry",
|
||||||
|
"cab": "application/vnd.ms-cab-compressed",
|
||||||
|
"xls": "application/vnd.ms-excel",
|
||||||
|
"xlm": "application/vnd.ms-excel",
|
||||||
|
"xla": "application/vnd.ms-excel",
|
||||||
|
"xlc": "application/vnd.ms-excel",
|
||||||
|
"xlt": "application/vnd.ms-excel",
|
||||||
|
"xlw": "application/vnd.ms-excel",
|
||||||
|
"xlam": "application/vnd.ms-excel.addin.macroenabled.12",
|
||||||
|
"xlsb": "application/vnd.ms-excel.sheet.binary.macroenabled.12",
|
||||||
|
"xlsm": "application/vnd.ms-excel.sheet.macroenabled.12",
|
||||||
|
"xltm": "application/vnd.ms-excel.template.macroenabled.12",
|
||||||
|
"eot": "application/vnd.ms-fontobject",
|
||||||
|
"chm": "application/vnd.ms-htmlhelp",
|
||||||
|
"ims": "application/vnd.ms-ims",
|
||||||
|
"lrm": "application/vnd.ms-lrm",
|
||||||
|
"thmx": "application/vnd.ms-officetheme",
|
||||||
|
"cat": "application/vnd.ms-pki.seccat",
|
||||||
|
"stl": "application/vnd.ms-pki.stl",
|
||||||
|
"ppt": "application/vnd.ms-powerpoint",
|
||||||
|
"pps": "application/vnd.ms-powerpoint",
|
||||||
|
"pot": "application/vnd.ms-powerpoint",
|
||||||
|
"ppam": "application/vnd.ms-powerpoint.addin.macroenabled.12",
|
||||||
|
"pptm": "application/vnd.ms-powerpoint.presentation.macroenabled.12",
|
||||||
|
"sldm": "application/vnd.ms-powerpoint.slide.macroenabled.12",
|
||||||
|
"ppsm": "application/vnd.ms-powerpoint.slideshow.macroenabled.12",
|
||||||
|
"potm": "application/vnd.ms-powerpoint.template.macroenabled.12",
|
||||||
|
"mpp": "application/vnd.ms-project",
|
||||||
|
"mpt": "application/vnd.ms-project",
|
||||||
|
"docm": "application/vnd.ms-word.document.macroenabled.12",
|
||||||
|
"dotm": "application/vnd.ms-word.template.macroenabled.12",
|
||||||
|
"wps": "application/vnd.ms-works",
|
||||||
|
"wks": "application/vnd.ms-works",
|
||||||
|
"wcm": "application/vnd.ms-works",
|
||||||
|
"wdb": "application/vnd.ms-works",
|
||||||
|
"wpl": "application/vnd.ms-wpl",
|
||||||
|
"xps": "application/vnd.ms-xpsdocument",
|
||||||
|
"mseq": "application/vnd.mseq",
|
||||||
|
"mus": "application/vnd.musician",
|
||||||
|
"msty": "application/vnd.muvee.style",
|
||||||
|
"taglet": "application/vnd.mynfc",
|
||||||
|
"nlu": "application/vnd.neurolanguage.nlu",
|
||||||
|
"ntf": "application/vnd.nitf",
|
||||||
|
"nitf": "application/vnd.nitf",
|
||||||
|
"nnd": "application/vnd.noblenet-directory",
|
||||||
|
"nns": "application/vnd.noblenet-sealer",
|
||||||
|
"nnw": "application/vnd.noblenet-web",
|
||||||
|
"ngdat": "application/vnd.nokia.n-gage.data",
|
||||||
|
"n-gage": "application/vnd.nokia.n-gage.symbian.install",
|
||||||
|
"rpst": "application/vnd.nokia.radio-preset",
|
||||||
|
"rpss": "application/vnd.nokia.radio-presets",
|
||||||
|
"edm": "application/vnd.novadigm.edm",
|
||||||
|
"edx": "application/vnd.novadigm.edx",
|
||||||
|
"ext": "application/vnd.novadigm.ext",
|
||||||
|
"odc": "application/vnd.oasis.opendocument.chart",
|
||||||
|
"otc": "application/vnd.oasis.opendocument.chart-template",
|
||||||
|
"odb": "application/vnd.oasis.opendocument.database",
|
||||||
|
"odf": "application/vnd.oasis.opendocument.formula",
|
||||||
|
"odft": "application/vnd.oasis.opendocument.formula-template",
|
||||||
|
"odg": "application/vnd.oasis.opendocument.graphics",
|
||||||
|
"otg": "application/vnd.oasis.opendocument.graphics-template",
|
||||||
|
"odi": "application/vnd.oasis.opendocument.image",
|
||||||
|
"oti": "application/vnd.oasis.opendocument.image-template",
|
||||||
|
"odp": "application/vnd.oasis.opendocument.presentation",
|
||||||
|
"otp": "application/vnd.oasis.opendocument.presentation-template",
|
||||||
|
"ods": "application/vnd.oasis.opendocument.spreadsheet",
|
||||||
|
"ots": "application/vnd.oasis.opendocument.spreadsheet-template",
|
||||||
|
"odt": "application/vnd.oasis.opendocument.text",
|
||||||
|
"odm": "application/vnd.oasis.opendocument.text-master",
|
||||||
|
"ott": "application/vnd.oasis.opendocument.text-template",
|
||||||
|
"oth": "application/vnd.oasis.opendocument.text-web",
|
||||||
|
"xo": "application/vnd.olpc-sugar",
|
||||||
|
"dd2": "application/vnd.oma.dd2+xml",
|
||||||
|
"oxt": "application/vnd.openofficeorg.extension",
|
||||||
|
"pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
||||||
|
"sldx": "application/vnd.openxmlformats-officedocument.presentationml.slide",
|
||||||
|
"ppsx": "application/vnd.openxmlformats-officedocument.presentationml.slideshow",
|
||||||
|
"potx": "application/vnd.openxmlformats-officedocument.presentationml.template",
|
||||||
|
"xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
||||||
|
"xltx": "application/vnd.openxmlformats-officedocument.spreadsheetml.template",
|
||||||
|
"docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
||||||
|
"dotx": "application/vnd.openxmlformats-officedocument.wordprocessingml.template",
|
||||||
|
"mgp": "application/vnd.osgeo.mapguide.package",
|
||||||
|
"dp": "application/vnd.osgi.dp",
|
||||||
|
"esa": "application/vnd.osgi.subsystem",
|
||||||
|
"pdb": "application/vnd.palm",
|
||||||
|
"pqa": "application/vnd.palm",
|
||||||
|
"oprc": "application/vnd.palm",
|
||||||
|
"paw": "application/vnd.pawaafile",
|
||||||
|
"str": "application/vnd.pg.format",
|
||||||
|
"ei6": "application/vnd.pg.osasli",
|
||||||
|
"efif": "application/vnd.picsel",
|
||||||
|
"wg": "application/vnd.pmi.widget",
|
||||||
|
"plf": "application/vnd.pocketlearn",
|
||||||
|
"pbd": "application/vnd.powerbuilder6",
|
||||||
|
"box": "application/vnd.previewsystems.box",
|
||||||
|
"mgz": "application/vnd.proteus.magazine",
|
||||||
|
"qps": "application/vnd.publishare-delta-tree",
|
||||||
|
"ptid": "application/vnd.pvi.ptid1",
|
||||||
|
"qxd": "application/vnd.quark.quarkxpress",
|
||||||
|
"qxt": "application/vnd.quark.quarkxpress",
|
||||||
|
"qwd": "application/vnd.quark.quarkxpress",
|
||||||
|
"qwt": "application/vnd.quark.quarkxpress",
|
||||||
|
"qxl": "application/vnd.quark.quarkxpress",
|
||||||
|
"qxb": "application/vnd.quark.quarkxpress",
|
||||||
|
"bed": "application/vnd.realvnc.bed",
|
||||||
|
"mxl": "application/vnd.recordare.musicxml",
|
||||||
|
"musicxml": "application/vnd.recordare.musicxml+xml",
|
||||||
|
"cryptonote": "application/vnd.rig.cryptonote",
|
||||||
|
"cod": "application/vnd.rim.cod",
|
||||||
|
"rm": "application/vnd.rn-realmedia",
|
||||||
|
"rmvb": "application/vnd.rn-realmedia-vbr",
|
||||||
|
"link66": "application/vnd.route66.link66+xml",
|
||||||
|
"st": "application/vnd.sailingtracker.track",
|
||||||
|
"see": "application/vnd.seemail",
|
||||||
|
"sema": "application/vnd.sema",
|
||||||
|
"semd": "application/vnd.semd",
|
||||||
|
"semf": "application/vnd.semf",
|
||||||
|
"ifm": "application/vnd.shana.informed.formdata",
|
||||||
|
"itp": "application/vnd.shana.informed.formtemplate",
|
||||||
|
"iif": "application/vnd.shana.informed.interchange",
|
||||||
|
"ipk": "application/vnd.shana.informed.package",
|
||||||
|
"twd": "application/vnd.simtech-mindmapper",
|
||||||
|
"twds": "application/vnd.simtech-mindmapper",
|
||||||
|
"mmf": "application/vnd.smaf",
|
||||||
|
"teacher": "application/vnd.smart.teacher",
|
||||||
|
"sdkm": "application/vnd.solent.sdkm+xml",
|
||||||
|
"sdkd": "application/vnd.solent.sdkm+xml",
|
||||||
|
"dxp": "application/vnd.spotfire.dxp",
|
||||||
|
"sfs": "application/vnd.spotfire.sfs",
|
||||||
|
"sdc": "application/vnd.stardivision.calc",
|
||||||
|
"sda": "application/vnd.stardivision.draw",
|
||||||
|
"sdd": "application/vnd.stardivision.impress",
|
||||||
|
"smf": "application/vnd.stardivision.math",
|
||||||
|
"sdw": "application/vnd.stardivision.writer",
|
||||||
|
"vor": "application/vnd.stardivision.writer",
|
||||||
|
"sgl": "application/vnd.stardivision.writer-global",
|
||||||
|
"smzip": "application/vnd.stepmania.package",
|
||||||
|
"sm": "application/vnd.stepmania.stepchart",
|
||||||
|
"sxc": "application/vnd.sun.xml.calc",
|
||||||
|
"stc": "application/vnd.sun.xml.calc.template",
|
||||||
|
"sxd": "application/vnd.sun.xml.draw",
|
||||||
|
"std": "application/vnd.sun.xml.draw.template",
|
||||||
|
"sxi": "application/vnd.sun.xml.impress",
|
||||||
|
"sti": "application/vnd.sun.xml.impress.template",
|
||||||
|
"sxm": "application/vnd.sun.xml.math",
|
||||||
|
"sxw": "application/vnd.sun.xml.writer",
|
||||||
|
"sxg": "application/vnd.sun.xml.writer.global",
|
||||||
|
"stw": "application/vnd.sun.xml.writer.template",
|
||||||
|
"sus": "application/vnd.sus-calendar",
|
||||||
|
"susp": "application/vnd.sus-calendar",
|
||||||
|
"svd": "application/vnd.svd",
|
||||||
|
"sis": "application/vnd.symbian.install",
|
||||||
|
"sisx": "application/vnd.symbian.install",
|
||||||
|
"xsm": "application/vnd.syncml+xml",
|
||||||
|
"bdm": "application/vnd.syncml.dm+wbxml",
|
||||||
|
"xdm": "application/vnd.syncml.dm+xml",
|
||||||
|
"tao": "application/vnd.tao.intent-module-archive",
|
||||||
|
"pcap": "application/vnd.tcpdump.pcap",
|
||||||
|
"cap": "application/vnd.tcpdump.pcap",
|
||||||
|
"dmp": "application/vnd.tcpdump.pcap",
|
||||||
|
"tmo": "application/vnd.tmobile-livetv",
|
||||||
|
"tpt": "application/vnd.trid.tpt",
|
||||||
|
"mxs": "application/vnd.triscape.mxs",
|
||||||
|
"tra": "application/vnd.trueapp",
|
||||||
|
"ufd": "application/vnd.ufdl",
|
||||||
|
"ufdl": "application/vnd.ufdl",
|
||||||
|
"utz": "application/vnd.uiq.theme",
|
||||||
|
"umj": "application/vnd.umajin",
|
||||||
|
"unityweb": "application/vnd.unity",
|
||||||
|
"uoml": "application/vnd.uoml+xml",
|
||||||
|
"vcx": "application/vnd.vcx",
|
||||||
|
"vsd": "application/vnd.visio",
|
||||||
|
"vst": "application/vnd.visio",
|
||||||
|
"vss": "application/vnd.visio",
|
||||||
|
"vsw": "application/vnd.visio",
|
||||||
|
"vis": "application/vnd.visionary",
|
||||||
|
"vsf": "application/vnd.vsf",
|
||||||
|
"wbxml": "application/vnd.wap.wbxml",
|
||||||
|
"wmlc": "application/vnd.wap.wmlc",
|
||||||
|
"wmlsc": "application/vnd.wap.wmlscriptc",
|
||||||
|
"wtb": "application/vnd.webturbo",
|
||||||
|
"nbp": "application/vnd.wolfram.player",
|
||||||
|
"wpd": "application/vnd.wordperfect",
|
||||||
|
"wqd": "application/vnd.wqd",
|
||||||
|
"stf": "application/vnd.wt.stf",
|
||||||
|
"xar": "application/vnd.xara",
|
||||||
|
"xfdl": "application/vnd.xfdl",
|
||||||
|
"hvd": "application/vnd.yamaha.hv-dic",
|
||||||
|
"hvs": "application/vnd.yamaha.hv-script",
|
||||||
|
"hvp": "application/vnd.yamaha.hv-voice",
|
||||||
|
"osf": "application/vnd.yamaha.openscoreformat",
|
||||||
|
"osfpvg": "application/vnd.yamaha.openscoreformat.osfpvg+xml",
|
||||||
|
"saf": "application/vnd.yamaha.smaf-audio",
|
||||||
|
"spf": "application/vnd.yamaha.smaf-phrase",
|
||||||
|
"cmp": "application/vnd.yellowriver-custom-menu",
|
||||||
|
"zir": "application/vnd.zul",
|
||||||
|
"zirz": "application/vnd.zul",
|
||||||
|
"zaz": "application/vnd.zzazz.deck+xml",
|
||||||
|
"vxml": "application/voicexml+xml",
|
||||||
|
"wgt": "application/widget",
|
||||||
|
"hlp": "application/winhlp",
|
||||||
|
"wsdl": "application/wsdl+xml",
|
||||||
|
"wspolicy": "application/wspolicy+xml",
|
||||||
|
"7z": "application/x-7z-compressed",
|
||||||
|
"abw": "application/x-abiword",
|
||||||
|
"ace": "application/x-ace-compressed",
|
||||||
|
"dmg": "application/x-apple-diskimage",
|
||||||
|
"aab": "application/x-authorware-bin",
|
||||||
|
"x32": "application/x-authorware-bin",
|
||||||
|
"u32": "application/x-authorware-bin",
|
||||||
|
"vox": "application/x-authorware-bin",
|
||||||
|
"aam": "application/x-authorware-map",
|
||||||
|
"aas": "application/x-authorware-seg",
|
||||||
|
"bcpio": "application/x-bcpio",
|
||||||
|
"torrent": "application/x-bittorrent",
|
||||||
|
"blb": "application/x-blorb",
|
||||||
|
"blorb": "application/x-blorb",
|
||||||
|
"bz": "application/x-bzip",
|
||||||
|
"bz2": "application/x-bzip2",
|
||||||
|
"boz": "application/x-bzip2",
|
||||||
|
"cbr": "application/x-cbr",
|
||||||
|
"cba": "application/x-cbr",
|
||||||
|
"cbt": "application/x-cbr",
|
||||||
|
"cbz": "application/x-cbr",
|
||||||
|
"cb7": "application/x-cbr",
|
||||||
|
"vcd": "application/x-cdlink",
|
||||||
|
"cfs": "application/x-cfs-compressed",
|
||||||
|
"chat": "application/x-chat",
|
||||||
|
"pgn": "application/x-chess-pgn",
|
||||||
|
"nsc": "application/x-conference",
|
||||||
|
"cpio": "application/x-cpio",
|
||||||
|
"csh": "application/x-csh",
|
||||||
|
"deb": "application/x-debian-package",
|
||||||
|
"udeb": "application/x-debian-package",
|
||||||
|
"dgc": "application/x-dgc-compressed",
|
||||||
|
"dir": "application/x-director",
|
||||||
|
"dcr": "application/x-director",
|
||||||
|
"dxr": "application/x-director",
|
||||||
|
"cst": "application/x-director",
|
||||||
|
"cct": "application/x-director",
|
||||||
|
"cxt": "application/x-director",
|
||||||
|
"w3d": "application/x-director",
|
||||||
|
"fgd": "application/x-director",
|
||||||
|
"swa": "application/x-director",
|
||||||
|
"wad": "application/x-doom",
|
||||||
|
"ncx": "application/x-dtbncx+xml",
|
||||||
|
"dtb": "application/x-dtbook+xml",
|
||||||
|
"res": "application/x-dtbresource+xml",
|
||||||
|
"dvi": "application/x-dvi",
|
||||||
|
"evy": "application/x-envoy",
|
||||||
|
"eva": "application/x-eva",
|
||||||
|
"bdf": "application/x-font-bdf",
|
||||||
|
"gsf": "application/x-font-ghostscript",
|
||||||
|
"psf": "application/x-font-linux-psf",
|
||||||
|
"pcf": "application/x-font-pcf",
|
||||||
|
"snf": "application/x-font-snf",
|
||||||
|
"pfa": "application/x-font-type1",
|
||||||
|
"pfb": "application/x-font-type1",
|
||||||
|
"pfm": "application/x-font-type1",
|
||||||
|
"afm": "application/x-font-type1",
|
||||||
|
"arc": "application/x-freearc",
|
||||||
|
"spl": "application/x-futuresplash",
|
||||||
|
"gca": "application/x-gca-compressed",
|
||||||
|
"ulx": "application/x-glulx",
|
||||||
|
"gnumeric": "application/x-gnumeric",
|
||||||
|
"gramps": "application/x-gramps-xml",
|
||||||
|
"gtar": "application/x-gtar",
|
||||||
|
"hdf": "application/x-hdf",
|
||||||
|
"install": "application/x-install-instructions",
|
||||||
|
"iso": "application/x-iso9660-image",
|
||||||
|
"jnlp": "application/x-java-jnlp-file",
|
||||||
|
"latex": "application/x-latex",
|
||||||
|
"lzh": "application/x-lzh-compressed",
|
||||||
|
"lha": "application/x-lzh-compressed",
|
||||||
|
"mie": "application/x-mie",
|
||||||
|
"prc": "application/x-mobipocket-ebook",
|
||||||
|
"mobi": "application/x-mobipocket-ebook",
|
||||||
|
"application": "application/x-ms-application",
|
||||||
|
"lnk": "application/x-ms-shortcut",
|
||||||
|
"wmd": "application/x-ms-wmd",
|
||||||
|
"wmz": "application/x-msmetafile",
|
||||||
|
"xbap": "application/x-ms-xbap",
|
||||||
|
"mdb": "application/x-msaccess",
|
||||||
|
"obd": "application/x-msbinder",
|
||||||
|
"crd": "application/x-mscardfile",
|
||||||
|
"clp": "application/x-msclip",
|
||||||
|
"exe": "application/x-msdownload",
|
||||||
|
"dll": "application/x-msdownload",
|
||||||
|
"com": "application/x-msdownload",
|
||||||
|
"bat": "application/x-msdownload",
|
||||||
|
"msi": "application/x-msdownload",
|
||||||
|
"mvb": "application/x-msmediaview",
|
||||||
|
"m13": "application/x-msmediaview",
|
||||||
|
"m14": "application/x-msmediaview",
|
||||||
|
"wmf": "application/x-msmetafile",
|
||||||
|
"emf": "application/x-msmetafile",
|
||||||
|
"emz": "application/x-msmetafile",
|
||||||
|
"mny": "application/x-msmoney",
|
||||||
|
"pub": "application/x-mspublisher",
|
||||||
|
"scd": "application/x-msschedule",
|
||||||
|
"trm": "application/x-msterminal",
|
||||||
|
"wri": "application/x-mswrite",
|
||||||
|
"nc": "application/x-netcdf",
|
||||||
|
"cdf": "application/x-netcdf",
|
||||||
|
"nzb": "application/x-nzb",
|
||||||
|
"p12": "application/x-pkcs12",
|
||||||
|
"pfx": "application/x-pkcs12",
|
||||||
|
"p7b": "application/x-pkcs7-certificates",
|
||||||
|
"spc": "application/x-pkcs7-certificates",
|
||||||
|
"p7r": "application/x-pkcs7-certreqresp",
|
||||||
|
"rar": "application/x-rar-compressed",
|
||||||
|
"ris": "application/x-research-info-systems",
|
||||||
|
"sh": "application/x-sh",
|
||||||
|
"shar": "application/x-shar",
|
||||||
|
"swf": "application/x-shockwave-flash",
|
||||||
|
"xap": "application/x-silverlight-app",
|
||||||
|
"sql": "application/x-sql",
|
||||||
|
"sit": "application/x-stuffit",
|
||||||
|
"sitx": "application/x-stuffitx",
|
||||||
|
"srt": "application/x-subrip",
|
||||||
|
"sv4cpio": "application/x-sv4cpio",
|
||||||
|
"sv4crc": "application/x-sv4crc",
|
||||||
|
"t3": "application/x-t3vm-image",
|
||||||
|
"gam": "application/x-tads",
|
||||||
|
"tar": "application/x-tar",
|
||||||
|
"tcl": "application/x-tcl",
|
||||||
|
"tex": "application/x-tex",
|
||||||
|
"tfm": "application/x-tex-tfm",
|
||||||
|
"texinfo": "application/x-texinfo",
|
||||||
|
"texi": "application/x-texinfo",
|
||||||
|
"obj": "application/x-tgif",
|
||||||
|
"ustar": "application/x-ustar",
|
||||||
|
"src": "application/x-wais-source",
|
||||||
|
"der": "application/x-x509-ca-cert",
|
||||||
|
"crt": "application/x-x509-ca-cert",
|
||||||
|
"fig": "application/x-xfig",
|
||||||
|
"xlf": "application/x-xliff+xml",
|
||||||
|
"xpi": "application/x-xpinstall",
|
||||||
|
"xz": "application/x-xz",
|
||||||
|
"z1": "application/x-zmachine",
|
||||||
|
"z2": "application/x-zmachine",
|
||||||
|
"z3": "application/x-zmachine",
|
||||||
|
"z4": "application/x-zmachine",
|
||||||
|
"z5": "application/x-zmachine",
|
||||||
|
"z6": "application/x-zmachine",
|
||||||
|
"z7": "application/x-zmachine",
|
||||||
|
"z8": "application/x-zmachine",
|
||||||
|
"xaml": "application/xaml+xml",
|
||||||
|
"xdf": "application/xcap-diff+xml",
|
||||||
|
"xenc": "application/xenc+xml",
|
||||||
|
"xhtml": "application/xhtml+xml",
|
||||||
|
"xht": "application/xhtml+xml",
|
||||||
|
"xml": "application/xml",
|
||||||
|
"xsl": "application/xml",
|
||||||
|
"dtd": "application/xml-dtd",
|
||||||
|
"xop": "application/xop+xml",
|
||||||
|
"xpl": "application/xproc+xml",
|
||||||
|
"xslt": "application/xslt+xml",
|
||||||
|
"xspf": "application/xspf+xml",
|
||||||
|
"mxml": "application/xv+xml",
|
||||||
|
"xhvml": "application/xv+xml",
|
||||||
|
"xvml": "application/xv+xml",
|
||||||
|
"xvm": "application/xv+xml",
|
||||||
|
"yang": "application/yang",
|
||||||
|
"yin": "application/yin+xml",
|
||||||
|
"zip": "application/zip",
|
||||||
|
"adp": "audio/adpcm",
|
||||||
|
"au": "audio/basic",
|
||||||
|
"snd": "audio/basic",
|
||||||
|
"mid": "audio/midi",
|
||||||
|
"midi": "audio/midi",
|
||||||
|
"kar": "audio/midi",
|
||||||
|
"rmi": "audio/midi",
|
||||||
|
"m4a": "audio/mp4",
|
||||||
|
"mp4a": "audio/mp4",
|
||||||
|
"mpga": "audio/mpeg",
|
||||||
|
"mp2": "audio/mpeg",
|
||||||
|
"mp2a": "audio/mpeg",
|
||||||
|
"mp3": "audio/mpeg",
|
||||||
|
"m2a": "audio/mpeg",
|
||||||
|
"m3a": "audio/mpeg",
|
||||||
|
"oga": "audio/ogg",
|
||||||
|
"ogg": "audio/ogg",
|
||||||
|
"spx": "audio/ogg",
|
||||||
|
"s3m": "audio/s3m",
|
||||||
|
"sil": "audio/silk",
|
||||||
|
"uva": "audio/vnd.dece.audio",
|
||||||
|
"uvva": "audio/vnd.dece.audio",
|
||||||
|
"eol": "audio/vnd.digital-winds",
|
||||||
|
"dra": "audio/vnd.dra",
|
||||||
|
"dts": "audio/vnd.dts",
|
||||||
|
"dtshd": "audio/vnd.dts.hd",
|
||||||
|
"lvp": "audio/vnd.lucent.voice",
|
||||||
|
"pya": "audio/vnd.ms-playready.media.pya",
|
||||||
|
"ecelp4800": "audio/vnd.nuera.ecelp4800",
|
||||||
|
"ecelp7470": "audio/vnd.nuera.ecelp7470",
|
||||||
|
"ecelp9600": "audio/vnd.nuera.ecelp9600",
|
||||||
|
"rip": "audio/vnd.rip",
|
||||||
|
"weba": "audio/webm",
|
||||||
|
"aac": "audio/x-aac",
|
||||||
|
"aif": "audio/x-aiff",
|
||||||
|
"aiff": "audio/x-aiff",
|
||||||
|
"aifc": "audio/x-aiff",
|
||||||
|
"caf": "audio/x-caf",
|
||||||
|
"flac": "audio/x-flac",
|
||||||
|
"mka": "audio/x-matroska",
|
||||||
|
"m3u": "audio/x-mpegurl",
|
||||||
|
"wax": "audio/x-ms-wax",
|
||||||
|
"wma": "audio/x-ms-wma",
|
||||||
|
"ram": "audio/x-pn-realaudio",
|
||||||
|
"ra": "audio/x-pn-realaudio",
|
||||||
|
"rmp": "audio/x-pn-realaudio-plugin",
|
||||||
|
"wav": "audio/x-wav",
|
||||||
|
"xm": "audio/xm",
|
||||||
|
"cdx": "chemical/x-cdx",
|
||||||
|
"cif": "chemical/x-cif",
|
||||||
|
"cmdf": "chemical/x-cmdf",
|
||||||
|
"cml": "chemical/x-cml",
|
||||||
|
"csml": "chemical/x-csml",
|
||||||
|
"xyz": "chemical/x-xyz",
|
||||||
|
"ttc": "font/collection",
|
||||||
|
"otf": "font/otf",
|
||||||
|
"ttf": "font/ttf",
|
||||||
|
"woff": "font/woff",
|
||||||
|
"woff2": "font/woff2",
|
||||||
|
"bmp": "image/bmp",
|
||||||
|
"cgm": "image/cgm",
|
||||||
|
"g3": "image/g3fax",
|
||||||
|
"gif": "image/gif",
|
||||||
|
"ief": "image/ief",
|
||||||
|
"jpeg": "image/jpeg",
|
||||||
|
"jpg": "image/jpeg",
|
||||||
|
"jpe": "image/jpeg",
|
||||||
|
"ktx": "image/ktx",
|
||||||
|
"png": "image/png",
|
||||||
|
"btif": "image/prs.btif",
|
||||||
|
"sgi": "image/sgi",
|
||||||
|
"svg": "image/svg+xml",
|
||||||
|
"svgz": "image/svg+xml",
|
||||||
|
"tiff": "image/tiff",
|
||||||
|
"tif": "image/tiff",
|
||||||
|
"psd": "image/vnd.adobe.photoshop",
|
||||||
|
"uvi": "image/vnd.dece.graphic",
|
||||||
|
"uvvi": "image/vnd.dece.graphic",
|
||||||
|
"uvg": "image/vnd.dece.graphic",
|
||||||
|
"uvvg": "image/vnd.dece.graphic",
|
||||||
|
"djvu": "image/vnd.djvu",
|
||||||
|
"djv": "image/vnd.djvu",
|
||||||
|
"sub": "text/vnd.dvb.subtitle",
|
||||||
|
"dwg": "image/vnd.dwg",
|
||||||
|
"dxf": "image/vnd.dxf",
|
||||||
|
"fbs": "image/vnd.fastbidsheet",
|
||||||
|
"fpx": "image/vnd.fpx",
|
||||||
|
"fst": "image/vnd.fst",
|
||||||
|
"mmr": "image/vnd.fujixerox.edmics-mmr",
|
||||||
|
"rlc": "image/vnd.fujixerox.edmics-rlc",
|
||||||
|
"mdi": "image/vnd.ms-modi",
|
||||||
|
"wdp": "image/vnd.ms-photo",
|
||||||
|
"npx": "image/vnd.net-fpx",
|
||||||
|
"wbmp": "image/vnd.wap.wbmp",
|
||||||
|
"xif": "image/vnd.xiff",
|
||||||
|
"webp": "image/webp",
|
||||||
|
"3ds": "image/x-3ds",
|
||||||
|
"ras": "image/x-cmu-raster",
|
||||||
|
"cmx": "image/x-cmx",
|
||||||
|
"fh": "image/x-freehand",
|
||||||
|
"fhc": "image/x-freehand",
|
||||||
|
"fh4": "image/x-freehand",
|
||||||
|
"fh5": "image/x-freehand",
|
||||||
|
"fh7": "image/x-freehand",
|
||||||
|
"ico": "image/x-icon",
|
||||||
|
"sid": "image/x-mrsid-image",
|
||||||
|
"pcx": "image/x-pcx",
|
||||||
|
"pic": "image/x-pict",
|
||||||
|
"pct": "image/x-pict",
|
||||||
|
"pnm": "image/x-portable-anymap",
|
||||||
|
"pbm": "image/x-portable-bitmap",
|
||||||
|
"pgm": "image/x-portable-graymap",
|
||||||
|
"ppm": "image/x-portable-pixmap",
|
||||||
|
"rgb": "image/x-rgb",
|
||||||
|
"tga": "image/x-tga",
|
||||||
|
"xbm": "image/x-xbitmap",
|
||||||
|
"xpm": "image/x-xpixmap",
|
||||||
|
"xwd": "image/x-xwindowdump",
|
||||||
|
"eml": "message/rfc822",
|
||||||
|
"mime": "message/rfc822",
|
||||||
|
"igs": "model/iges",
|
||||||
|
"iges": "model/iges",
|
||||||
|
"msh": "model/mesh",
|
||||||
|
"mesh": "model/mesh",
|
||||||
|
"silo": "model/mesh",
|
||||||
|
"dae": "model/vnd.collada+xml",
|
||||||
|
"dwf": "model/vnd.dwf",
|
||||||
|
"gdl": "model/vnd.gdl",
|
||||||
|
"gtw": "model/vnd.gtw",
|
||||||
|
"mts": "model/vnd.mts",
|
||||||
|
"vtu": "model/vnd.vtu",
|
||||||
|
"wrl": "model/vrml",
|
||||||
|
"vrml": "model/vrml",
|
||||||
|
"x3db": "model/x3d+binary",
|
||||||
|
"x3dbz": "model/x3d+binary",
|
||||||
|
"x3dv": "model/x3d+vrml",
|
||||||
|
"x3dvz": "model/x3d+vrml",
|
||||||
|
"x3d": "model/x3d+xml",
|
||||||
|
"x3dz": "model/x3d+xml",
|
||||||
|
"appcache": "text/cache-manifest",
|
||||||
|
"ics": "text/calendar",
|
||||||
|
"ifb": "text/calendar",
|
||||||
|
"css": "text/css",
|
||||||
|
"csv": "text/csv",
|
||||||
|
"html": "text/html",
|
||||||
|
"htm": "text/html",
|
||||||
|
"n3": "text/n3",
|
||||||
|
"txt": "text/plain",
|
||||||
|
"text": "text/plain",
|
||||||
|
"conf": "text/plain",
|
||||||
|
"def": "text/plain",
|
||||||
|
"list": "text/plain",
|
||||||
|
"log": "text/plain",
|
||||||
|
"in": "text/plain",
|
||||||
|
"dsc": "text/prs.lines.tag",
|
||||||
|
"rtx": "text/richtext",
|
||||||
|
"sgml": "text/sgml",
|
||||||
|
"sgm": "text/sgml",
|
||||||
|
"tsv": "text/tab-separated-values",
|
||||||
|
"t": "text/troff",
|
||||||
|
"tr": "text/troff",
|
||||||
|
"roff": "text/troff",
|
||||||
|
"man": "text/troff",
|
||||||
|
"me": "text/troff",
|
||||||
|
"ms": "text/troff",
|
||||||
|
"ttl": "text/turtle",
|
||||||
|
"uri": "text/uri-list",
|
||||||
|
"uris": "text/uri-list",
|
||||||
|
"urls": "text/uri-list",
|
||||||
|
"vcard": "text/vcard",
|
||||||
|
"curl": "text/vnd.curl",
|
||||||
|
"dcurl": "text/vnd.curl.dcurl",
|
||||||
|
"mcurl": "text/vnd.curl.mcurl",
|
||||||
|
"scurl": "text/vnd.curl.scurl",
|
||||||
|
"fly": "text/vnd.fly",
|
||||||
|
"flx": "text/vnd.fmi.flexstor",
|
||||||
|
"gv": "text/vnd.graphviz",
|
||||||
|
"3dml": "text/vnd.in3d.3dml",
|
||||||
|
"spot": "text/vnd.in3d.spot",
|
||||||
|
"jad": "text/vnd.sun.j2me.app-descriptor",
|
||||||
|
"wml": "text/vnd.wap.wml",
|
||||||
|
"wmls": "text/vnd.wap.wmlscript",
|
||||||
|
"s": "text/x-asm",
|
||||||
|
"asm": "text/x-asm",
|
||||||
|
"c": "text/x-c",
|
||||||
|
"cc": "text/x-c",
|
||||||
|
"cxx": "text/x-c",
|
||||||
|
"cpp": "text/x-c",
|
||||||
|
"h": "text/x-c",
|
||||||
|
"hh": "text/x-c",
|
||||||
|
"dic": "text/x-c",
|
||||||
|
"f": "text/x-fortran",
|
||||||
|
"for": "text/x-fortran",
|
||||||
|
"f77": "text/x-fortran",
|
||||||
|
"f90": "text/x-fortran",
|
||||||
|
"java": "text/x-java-source",
|
||||||
|
"nfo": "text/x-nfo",
|
||||||
|
"opml": "text/x-opml",
|
||||||
|
"p": "text/x-pascal",
|
||||||
|
"pas": "text/x-pascal",
|
||||||
|
"etx": "text/x-setext",
|
||||||
|
"sfv": "text/x-sfv",
|
||||||
|
"uu": "text/x-uuencode",
|
||||||
|
"vcs": "text/x-vcalendar",
|
||||||
|
"vcf": "text/x-vcard",
|
||||||
|
"3gp": "video/3gpp",
|
||||||
|
"3g2": "video/3gpp2",
|
||||||
|
"h261": "video/h261",
|
||||||
|
"h263": "video/h263",
|
||||||
|
"h264": "video/h264",
|
||||||
|
"jpgv": "video/jpeg",
|
||||||
|
"jpm": "video/jpm",
|
||||||
|
"jpgm": "video/jpm",
|
||||||
|
"mj2": "video/mj2",
|
||||||
|
"mjp2": "video/mj2",
|
||||||
|
"mp4": "video/mp4",
|
||||||
|
"mp4v": "video/mp4",
|
||||||
|
"mpg4": "video/mp4",
|
||||||
|
"mpeg": "video/mpeg",
|
||||||
|
"mpg": "video/mpeg",
|
||||||
|
"mpe": "video/mpeg",
|
||||||
|
"m1v": "video/mpeg",
|
||||||
|
"m2v": "video/mpeg",
|
||||||
|
"ogv": "video/ogg",
|
||||||
|
"qt": "video/quicktime",
|
||||||
|
"mov": "video/quicktime",
|
||||||
|
"uvh": "video/vnd.dece.hd",
|
||||||
|
"uvvh": "video/vnd.dece.hd",
|
||||||
|
"uvm": "video/vnd.dece.mobile",
|
||||||
|
"uvvm": "video/vnd.dece.mobile",
|
||||||
|
"uvp": "video/vnd.dece.pd",
|
||||||
|
"uvvp": "video/vnd.dece.pd",
|
||||||
|
"uvs": "video/vnd.dece.sd",
|
||||||
|
"uvvs": "video/vnd.dece.sd",
|
||||||
|
"uvv": "video/vnd.dece.video",
|
||||||
|
"uvvv": "video/vnd.dece.video",
|
||||||
|
"dvb": "video/vnd.dvb.file",
|
||||||
|
"fvt": "video/vnd.fvt",
|
||||||
|
"mxu": "video/vnd.mpegurl",
|
||||||
|
"m4u": "video/vnd.mpegurl",
|
||||||
|
"pyv": "video/vnd.ms-playready.media.pyv",
|
||||||
|
"uvu": "video/vnd.uvvu.mp4",
|
||||||
|
"uvvu": "video/vnd.uvvu.mp4",
|
||||||
|
"viv": "video/vnd.vivo",
|
||||||
|
"webm": "video/webm",
|
||||||
|
"f4v": "video/x-f4v",
|
||||||
|
"fli": "video/x-fli",
|
||||||
|
"flv": "video/x-flv",
|
||||||
|
"m4v": "video/x-m4v",
|
||||||
|
"mkv": "video/x-matroska",
|
||||||
|
"mk3d": "video/x-matroska",
|
||||||
|
"mks": "video/x-matroska",
|
||||||
|
"mng": "video/x-mng",
|
||||||
|
"asf": "video/x-ms-asf",
|
||||||
|
"asx": "video/x-ms-asf",
|
||||||
|
"vob": "video/x-ms-vob",
|
||||||
|
"wm": "video/x-ms-wm",
|
||||||
|
"wmv": "video/x-ms-wmv",
|
||||||
|
"wmx": "video/x-ms-wmx",
|
||||||
|
"wvx": "video/x-ms-wvx",
|
||||||
|
"avi": "video/x-msvideo",
|
||||||
|
"movie": "video/x-sgi-movie",
|
||||||
|
"smv": "video/x-smv",
|
||||||
|
"ice": "x-conference/x-cooltalk",
|
||||||
|
"map": "application/json",
|
||||||
|
"jsm": "application/javascript"
|
||||||
|
}
|
||||||
152
config/global.php
Normal file
152
config/global.php
Normal file
@ -0,0 +1,152 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
/** @noinspection PhpComposerExtensionStubsInspection */
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
/* bind host */
|
||||||
|
$config['host'] = '127.0.0.1';
|
||||||
|
|
||||||
|
/* bind port */
|
||||||
|
$config['port'] = 30001;
|
||||||
|
|
||||||
|
/* 框架开到公网或外部的HTTP访问链接,通过 DataProvider::getFrameworkLink() 获取 */
|
||||||
|
$config['http_reverse_link'] = 'http://shell.zhamao.xin/';
|
||||||
|
|
||||||
|
/* 框架是否启动debug模式,当debug模式为true时,启用热更新(需要安装inotify扩展) */
|
||||||
|
$config['debug_mode'] = false;
|
||||||
|
|
||||||
|
/* 存放框架内文件数据的目录 */
|
||||||
|
$config['zm_data'] = realpath(WORKING_DIR) . '/zm_data/';
|
||||||
|
|
||||||
|
/* 存放各个模块配置文件的目录 */
|
||||||
|
$config['config_dir'] = $config['zm_data'] . 'config/';
|
||||||
|
|
||||||
|
/* 存放崩溃和运行日志的目录 */
|
||||||
|
$config['crash_dir'] = $config['zm_data'] . 'crash/';
|
||||||
|
|
||||||
|
/* 对应swoole的server->set参数 */
|
||||||
|
$config['swoole'] = [
|
||||||
|
'log_file' => $config['crash_dir'] . 'swoole_error.log',
|
||||||
|
// 'worker_num' => swoole_cpu_num(), //如果你只有一个 OneBot 实例连接到框架并且代码没有复杂的CPU密集计算,则可把这里改为1使用全局变量
|
||||||
|
'dispatch_mode' => 2, // 包分配原则,见 https://wiki.swoole.com/#/server/setting?id=dispatch_mode
|
||||||
|
'max_coroutine' => 300000,
|
||||||
|
'max_wait_time' => 5,
|
||||||
|
// 'task_worker_num' => 4,
|
||||||
|
// 'task_enable_coroutine' => true
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 一些框架与框架运行时设置的调整 */
|
||||||
|
$config['runtime'] = [
|
||||||
|
'swoole_coroutine_hook_flags' => SWOOLE_HOOK_ALL & (~SWOOLE_HOOK_CURL),
|
||||||
|
'swoole_server_mode' => SWOOLE_PROCESS,
|
||||||
|
'middleware_error_policy' => 1,
|
||||||
|
'reload_delay_time' => 800,
|
||||||
|
'global_middleware_binding' => [],
|
||||||
|
'save_console_log_file' => false, // 改为目标路径,则将 Console 输出的日志保存到文件
|
||||||
|
'annotation_reader_ignore' => [ // 设置注解解析器忽略的注解名或命名空间,防止解析到不该解析的
|
||||||
|
'name' => [
|
||||||
|
'mixin',
|
||||||
|
],
|
||||||
|
'namespace' => [],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 轻量字符串缓存,默认开启 */
|
||||||
|
$config['light_cache'] = [
|
||||||
|
'size' => 512, // 最多允许储存的条数(需要2的倍数)
|
||||||
|
'max_strlen' => 32768, // 单行字符串最大长度(需要2的倍数)
|
||||||
|
'hash_conflict_proportion' => 0.6, // Hash冲突率(越大越好,但是需要的内存更多)
|
||||||
|
'persistence_path' => $config['zm_data'] . '_cache.json',
|
||||||
|
'auto_save_interval' => 900,
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 大容量跨进程变量存储(2.2.0可用) */
|
||||||
|
$config['worker_cache'] = [
|
||||||
|
'worker' => 0,
|
||||||
|
'transaction_timeout' => 30000,
|
||||||
|
];
|
||||||
|
|
||||||
|
/* MySQL数据库连接信息,host留空则启动时不创建sql连接池 */
|
||||||
|
$config['mysql_config'] = [
|
||||||
|
'host' => '',
|
||||||
|
'port' => 3306,
|
||||||
|
'unix_socket' => null,
|
||||||
|
'username' => 'root',
|
||||||
|
'password' => '123456',
|
||||||
|
'dbname' => '',
|
||||||
|
'charset' => 'utf8mb4',
|
||||||
|
'pool_size' => 64,
|
||||||
|
'options' => [
|
||||||
|
PDO::ATTR_STRINGIFY_FETCHES => false,
|
||||||
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/* Redis连接信息,host留空则启动时不创建Redis连接池 */
|
||||||
|
$config['redis_config'] = [
|
||||||
|
'host' => '',
|
||||||
|
'port' => 6379,
|
||||||
|
'timeout' => 1,
|
||||||
|
'db_index' => 0,
|
||||||
|
'auth' => '',
|
||||||
|
];
|
||||||
|
|
||||||
|
/* onebot连接约定的token */
|
||||||
|
$config['access_token'] = '';
|
||||||
|
|
||||||
|
/* HTTP服务器固定请求头的返回 */
|
||||||
|
$config['http_header'] = [
|
||||||
|
'Server' => 'zhamao-framework',
|
||||||
|
'Content-Type' => 'text/html; charset=utf-8',
|
||||||
|
];
|
||||||
|
|
||||||
|
/* HTTP服务器在指定状态码下回复的页面(默认) */
|
||||||
|
$config['http_default_code_page'] = [
|
||||||
|
'404' => '404.html',
|
||||||
|
];
|
||||||
|
|
||||||
|
/* zhamao-framework在框架启动时初始化的atomic们 */
|
||||||
|
$config['init_atomics'] = [
|
||||||
|
// 'custom_atomic_name' => 0, //自定义添加的Atomic
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 终端日志显示等级(0-4) */
|
||||||
|
$config['info_level'] = 2;
|
||||||
|
|
||||||
|
/* 上下文接口类 implemented from ContextInterface */
|
||||||
|
$config['context_class'] = \ZM\Context\Context::class;
|
||||||
|
|
||||||
|
/* 静态文件访问 */
|
||||||
|
$config['static_file_server'] = [
|
||||||
|
'status' => false,
|
||||||
|
'document_root' => realpath(__DIR__ . '/../') . '/resources/html',
|
||||||
|
'document_index' => [
|
||||||
|
'index.html',
|
||||||
|
],
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 机器人解析模块,关闭后无法使用如CQCommand等注解(上面的modules即将废弃) */
|
||||||
|
$config['onebot'] = [
|
||||||
|
'status' => false,
|
||||||
|
'single_bot_mode' => false,
|
||||||
|
'message_level' => 99,
|
||||||
|
'message_convert_string' => true,
|
||||||
|
'message_command_policy' => 'interrupt',
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 一个远程简易终端,使用nc直接连接即可,但是不建议开放host为0.0.0.0(远程连接) */
|
||||||
|
$config['remote_terminal'] = [
|
||||||
|
'status' => false,
|
||||||
|
'host' => '127.0.0.1',
|
||||||
|
'port' => 20002,
|
||||||
|
'token' => '',
|
||||||
|
];
|
||||||
|
|
||||||
|
/* 模块(插件)加载器的相关设置 */
|
||||||
|
$config['module_loader'] = [
|
||||||
|
'enable_hotload' => false,
|
||||||
|
'load_path' => $config['zm_data'] . 'modules',
|
||||||
|
];
|
||||||
|
|
||||||
|
return $config;
|
||||||
6
config/motd.txt
Normal file
6
config/motd.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
______
|
||||||
|
|__ / |__ __ _ _ __ ___ __ _ ___
|
||||||
|
/ /| '_ \ / _` | '_ ` _ \ / _` |/ _ \
|
||||||
|
/ /_| | | | (_| | | | | | | (_| | (_) |
|
||||||
|
/____|_| |_|\__,_|_| |_| |_|\__,_|\___/
|
||||||
|
|
||||||
10
config/shell_list.json
Normal file
10
config/shell_list.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"brew-update": {
|
||||||
|
"description": "更新Homebrew(测试命令)",
|
||||||
|
"command": "brew update"
|
||||||
|
},
|
||||||
|
"neofetch": {
|
||||||
|
"description": "在线运行neofetch",
|
||||||
|
"command": "curl -H 'User-Agent: Chrome' -s https://gitee.com/mirrors/neofetch/raw/master/neofetch | bash"
|
||||||
|
}
|
||||||
|
}
|
||||||
69
install-runtime.sh
Executable file
69
install-runtime.sh
Executable file
@ -0,0 +1,69 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
function download_file() {
|
||||||
|
downloader="wget"
|
||||||
|
type wget >/dev/null 2>&1 || { downloader="curl"; }
|
||||||
|
if [ "$downloader" = "wget" ]; then
|
||||||
|
_down_prefix="O"
|
||||||
|
else
|
||||||
|
_down_prefix="o"
|
||||||
|
fi
|
||||||
|
_down_symbol=0
|
||||||
|
if [ ! -f "$2" ]; then
|
||||||
|
echo $1
|
||||||
|
$downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \
|
||||||
|
echo "完成!" && _down_symbol=1
|
||||||
|
else
|
||||||
|
echo "已存在!" && _down_symbol=1
|
||||||
|
fi
|
||||||
|
if [ $_down_symbol == 0 ]; then
|
||||||
|
echo "失败!请检查网络连接!"
|
||||||
|
rm -rf "$2"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_composer_and_php() {
|
||||||
|
succ=$("$(pwd)/runtime/composer" -n about | grep Manage)
|
||||||
|
if [ "$succ" = "" ]; then
|
||||||
|
echo "Download PHP binary and composer failed!"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$(uname -s)" != "Linux" ]; then
|
||||||
|
echo "Only support Linux!!!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
ZM_PHP_VERSION="7.4"
|
||||||
|
if [ "$ZM_DOWN_PHP_VERSION" != "" ]; then
|
||||||
|
ZM_PHP_VERSION="$ZM_DOWN_PHP_VERSION"
|
||||||
|
echo "Using custom PHP version: $ZM_PHP_VERSION"
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir "$(pwd)/runtime" >/dev/null 2>&1
|
||||||
|
if [ ! -f "$(pwd)/runtime/php" ]; then
|
||||||
|
download_file "https://dl.zhamao.me/php-bin/down.php?php_ver=$ZM_PHP_VERSION&arch=$(uname -m)" "$(pwd)/runtime/php.tar.gz"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
tar -xf "$(pwd)/runtime/php.tar.gz" -C "$(pwd)/runtime/"
|
||||||
|
fi
|
||||||
|
if [ ! -f "$(pwd)/runtime/composer" ]; then
|
||||||
|
download_file "https://mirrors.aliyun.com/composer/composer.phar" "$(pwd)/runtime/composer.phar"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo '$(dirname $0)/php $(dirname $0)/composer.phar $@' > $(pwd)/runtime/composer
|
||||||
|
chmod +x $(pwd)/runtime/composer
|
||||||
|
test_composer_and_php
|
||||||
|
fi
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "成功下载!" && \
|
||||||
|
echo -e "PHP使用:\truntime/php -v" && \
|
||||||
|
echo -e "Composer使用:\truntime/composer"
|
||||||
78
src/QuickShell/QuickShellController.php
Normal file
78
src/QuickShell/QuickShellController.php
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace QuickShell;
|
||||||
|
|
||||||
|
use ZM\Annotation\Http\Controller;
|
||||||
|
use ZM\Annotation\Http\RequestMapping;
|
||||||
|
use ZM\Annotation\Swoole\OnRequestEvent;
|
||||||
|
use ZM\Config\ZMConfig;
|
||||||
|
use ZM\Event\EventDispatcher;
|
||||||
|
use ZM\Exception\InterruptException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Controller("/")
|
||||||
|
*/
|
||||||
|
class QuickShellController
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @RequestMapping("/manifest")
|
||||||
|
*/
|
||||||
|
public function manifest()
|
||||||
|
{
|
||||||
|
return json_encode(ZMConfig::get('shell_list'), 128|256);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @RequestMapping("/")
|
||||||
|
* @RequestMapping("/index")
|
||||||
|
* @RequestMapping("/list")
|
||||||
|
*/
|
||||||
|
public function index()
|
||||||
|
{
|
||||||
|
$response = implode("\n", QuickShellProvider::getInstance()->getShellList()) . PHP_EOL;
|
||||||
|
$response .= "执行:\tcurl -s http://shell.zhamao.xin/run/{name} | bash" . PHP_EOL;
|
||||||
|
return $response;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @RequestMapping("/test")
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function test()
|
||||||
|
{
|
||||||
|
return cmd('bash -c "$(curl -fsSL https://api.zhamao.xin/tools/env.sh)"');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @RequestMapping("/run")
|
||||||
|
*/
|
||||||
|
public function runHelp()
|
||||||
|
{
|
||||||
|
return cmd('echo ""');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @RequestMapping("/run/{name}")
|
||||||
|
*
|
||||||
|
* @param $param
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function run($param): string
|
||||||
|
{
|
||||||
|
$shell = QuickShellProvider::getInstance()->isShellExists($param['name']);
|
||||||
|
if (!$shell) {
|
||||||
|
return cmd("echo 'shell \"".$param['name']."\" not found'");
|
||||||
|
}
|
||||||
|
return cmd(QuickShellProvider::getInstance()->getShellCommand($param['name']));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 阻止 Chrome 自动请求 /favicon.ico 导致的多条请求并发和干扰
|
||||||
|
* @OnRequestEvent(rule="ctx()->getRequest()->server['request_uri'] == '/favicon.ico'",level=200)
|
||||||
|
* @throws InterruptException
|
||||||
|
*/
|
||||||
|
public function onRequest()
|
||||||
|
{
|
||||||
|
EventDispatcher::interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
35
src/QuickShell/QuickShellProvider.php
Normal file
35
src/QuickShell/QuickShellProvider.php
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace QuickShell;
|
||||||
|
|
||||||
|
use ZM\Config\ZMConfig;
|
||||||
|
use ZM\Console\Console;
|
||||||
|
use ZM\Utils\SingletonTrait;
|
||||||
|
|
||||||
|
class QuickShellProvider
|
||||||
|
{
|
||||||
|
use SingletonTrait;
|
||||||
|
|
||||||
|
public function getShellList(): array
|
||||||
|
{
|
||||||
|
$ls = [];
|
||||||
|
foreach (ZMConfig::get('shell_list') as $shell_name => $shell_class) {
|
||||||
|
$ls[] = Console::setColor($shell_name, 'green') . ":\t" . $shell_class['description'];
|
||||||
|
}
|
||||||
|
return $ls;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isShellExists($name)
|
||||||
|
{
|
||||||
|
return array_key_exists($name, ZMConfig::get('shell_list'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function getShellCommand($name)
|
||||||
|
{
|
||||||
|
$d = ZMConfig::get('shell_list')[$name]['command'] ?? null;
|
||||||
|
if ($d === null) {
|
||||||
|
return 'echo "command not found"';
|
||||||
|
}
|
||||||
|
return $d;
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/QuickShell/global_function.php
Normal file
6
src/QuickShell/global_function.php
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
function cmd($cmd): string
|
||||||
|
{
|
||||||
|
return $cmd . PHP_EOL;
|
||||||
|
}
|
||||||
35
zhamao
Executable file
35
zhamao
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# shellcheck disable=SC2068
|
||||||
|
# shellcheck disable=SC2181
|
||||||
|
# author: crazywhalecc
|
||||||
|
# since: 2.5.0
|
||||||
|
|
||||||
|
|
||||||
|
if [ -f "$(pwd)/runtime/php" ]; then
|
||||||
|
executable="$(pwd)/runtime/php"
|
||||||
|
echo "* Framework started with built-in php."
|
||||||
|
else
|
||||||
|
which php >/dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
executable=$(which php)
|
||||||
|
else
|
||||||
|
echo '[ErrCode:E00014] Cannot find any PHP runtime, please use command "./install-runtime.sh" or install PHP manually!'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
result=$(echo "$1" | grep -E "module|build")
|
||||||
|
|
||||||
|
if [ "$result" != "" ]; then
|
||||||
|
executable="$executable -d phar.readonly=off"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -f "$(pwd)/src/entry.php" ]; then
|
||||||
|
$executable "$(pwd)/src/entry.php" $@
|
||||||
|
elif [ -f "$(pwd)/vendor/zhamao/framework/src/entry.php" ]; then
|
||||||
|
$executable "$(pwd)/vendor/zhamao/framework/src/entry.php" $@
|
||||||
|
else
|
||||||
|
echo "[ErrCode:E00015] Cannot find zhamao-framework entry file!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
Loading…
x
Reference in New Issue
Block a user