vscode实用插件荟萃
JyLie 2020-10-28 idevscode
持续更新...
# vscode download
国内存在下载 vscode或存在下载失败或下载较慢的问题,可能与科学上网或镜像源问题。
最直接的方法是使用国内源进行下载:vscode.cdn.azure.cn
。
即将下载链接中 az764295.vo.msecnd.net
替换为 vscode.cdn.azure.cn
。如下:
- vscode Stable
将 https://az764295.vo.msecnd.net/insider/155cd6db223feb1f8c734ca70e108b9efec7b054/VSCodeUserSetup-x64-1.76.0.exe
替换为 https://vscode.cdn.azure.cn/stable/92da9481c0904c6adfe372c12da3b7748d74bdcb/VSCodeUserSetup-x64-1.76.0.exe
- vscode Insiders
将 https://az764295.vo.msecnd.net/insider/155cd6db223feb1f8c734ca70e108b9efec7b054/VSCodeUserSetup-x64-1.77.0-insider.exe
替换为 https://vscode.cdn.azure.cn/insider/155cd6db223feb1f8c734ca70e108b9efec7b054/VSCodeUserSetup-x64-1.77.0-insider.exe
# 实用插件
# theme
Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code : 适用于 VS Code 的中文(简体)语言包
One Dark Pro : Atom‘s iconic One Dark theme for Visual Studio Code
vscode-icons : vscode 官方目录icon
# generators
koroFileHeader : 注释模板的设置
gitignore : CodeZombie .gitignore 模板生成器
Autoprefixer 自动添加cssployfix
Auto Close Tag : 自动闭合标签,比如你敲下<h1>,就会自动补上</h1>。
Auto Rename Tag : 自动重命名标签,修改开始标签,结束标签也会自动修改。
Live Sass Compiler sass编译器,支持autoprefix
# debugger
REST Client : http调试工具
GitLens : 显示每条git提交记录,包括提交时间、提交用户等
Git Graph : 显示图形化的git分支情况。点击左下角git Graph显示。
Live Server : 灵活启动静态页面与动态页面浏览。右下角或右击页面按Open With Live Server访问页面
Code Runner : 支持运行各类语言代码,和自定义命令。
# format and lint
YAML : YAML文件
Prettify JSON : 格式化JSON
Prettier - code formatter : 代码格式化
EditorConfig for VS Code : EditorConfig Support for Visual Studio Code
Better Align : Align code without selecting them first.(publisher:"wwm")
ESLint : JavaScript代码规则校验
Stylelint :Official Stylelint extension for Visual Studio Code
# assist
Guides : 缩进检查(vscode有自带,可选)
Path Intellisense : 智能显示文件目录
Can I Use : HTML5、CSS3、SVG的浏览器兼容性检查
Code Spell Checker : 拼音正确性检测,错误单词会有波浪线提示。
JavaScript (ES6) code snippets : Javascript 快捷代码段。
StandardJS - JavaScript Standard Style : Visual Studio Code extension for JavaScript Standard Style with automatic fixing.
WXML - Language Service : 微信小程序 快捷代码段
ES7+ React/Redux/React-Native snippets : React 快捷代码段。
vetur : Vue2语法高亮
Volar(Vue Language Feature) : Vue3语法高亮
TypeScript Vue Plugin (Volar) : Vue3 Typescript 支持
vscode-styled-components : css组件化语法高亮。如:css-in-js, ....
Python : 语言代码包相关
SVG Snippets : SVG Coding, Minify, Pretty, Preview All-In-One
SVG : SVG Coding, Minify, Pretty, Preview All-In-One
# 按需可选
any-rule : 正则表达式快捷代码
element-ui-helper : ElementUI API 快捷查看
Version Lens : 查看nodejs管理包文件的各个依赖包的详细版本
TODO Highlight : 高亮TODO:和FIXME:,配合注释使用哦~
watatime : 编程时间管理工具 api : 24f00fe9-af05-4af0-bb71-64dbbb4c0ba0
Remote-SSH 和 Remote-SSH: Editing Configuration Files : 编辑远程服务器配置文件,部署项目必备。这两个插件可以让你直接在VSCode打开远程服务器(你可以直接复制VSCode里的文件粘贴上去,或者直接在服务器上使用VSCode修改代码,也可以通过VSCode打开终端)
Debugger for Chrome已弃用,改用VScode内置JavaScript Debugger : chrome调试工具
Settings Sync(2023年开始使用VScode内置Settings Sync) : vscode配置同步 : github token id : XXXX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:VSCODE_SYNC; gist id:7e6ad7cc5a79a0bd91a3c31e98c44a6f
carbon-now-sh : 生成好看的代码块图片。Alt+Cmd+A or (Alt+Windows+A on Windows)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# .vscode/settings.json
用户设置配置
{
/* window */
"window.zoomLevel": 0,
/* wordkbench */
"workbench.colorTheme": "One Dark Pro", // 主题
"workbench.iconTheme": "vscode-icons", // 文件主题
"workbench.tree.indent": 16, // 树缩进
"workbench.editor.enablePreview": false,
/* terminal */
"terminal.integrated.defaultProfile.windows": "PowerShell", // 默认终端
"terminal.integrated.defaultProfile.osx": "zsh", // 默认终端
"terminal.integrated.copyOnSelection": true, // 终端选中复制
"terminal.integrated.fontSize": 16, // 终端字号
/* files */
"files.autoSave": "onFocusChange", // 自动保存
"files.eol": "\n",
"files.enableTrash": false,
// 在文件底部添加新代码行时,强制所有文件都有一行空格。
"files.insertFinalNewline": true,
// 比如小程序中的 .wxss 这种文件,会把它作为css文件来处理,提供对应的css的语法提示,css的格式化等等。
"files.associations": {
"*.cjson": "jsonc",
"*.wxss": "css",
"*.wxs": "javascript",
"*.wpy": "vue",
"*.jsx": "javascriptreact",
"*.hbs": "javascript"
},
/* search */
// VScode进行文件搜索时,不搜索这些区域。注意:vs已经贴心的默认设置了 node_modules 和 bower_components 文件夹
"search.exclude": {
"**/.git": true,
"**/.gitignore": true,
"**/.svn": true,
"**/.DS_Store": true,
"**/.idea": true,
"**/.vscode": false,
"**/yarn.lock": true,
"**/tmp": true,
"**/dist": true,
"**/build": true
},
/* editor */
"editor.formatOnSave": true, // 保存格式化
"editor.tabSize": 2, // 一个tab强制转换为2个空格
"editor.fontSize": 16,
"editor.lineHeight": 20,
"editor.renderLineHighlight": "all", // 空白字符显示方式
"editor.wordWrapColumn": 120,
"editor.wordWrap": "on", // 在视区宽度处换行,
"editor.smoothScrolling": true, // 滚动时启用动画
"editor.bracketPairColorization.enabled": true, // 彩虹🌈括号
"editor.renderWhitespace": "none",
"editor.cursorBlinking": "smooth",
"editor.multiCursorModifier": "ctrlCmd",
"editor.snippetSuggestions": "top",
// 使用vscode的自动格式化时,有时会把一行过长的代码折行。200表示200个字符处折行
"editor.quickSuggestions": {
"other": true,
"comments": true,
"strings": true // 在键入字符串时启用建议
},
"editor.suggestSelection": "first",
"editor.formatOnPaste": true,
// 开启后可能与eslint冲突引起点击ctrl+s不保存
"editor.codeActionsOnSave": {
// For ESLint
"source.fixAll.eslint": true,
// For TSLint
"source.fixAll.tslint": true,
// For Stylelint
"source.fixAll.stylelint": true
},
"editor.defaultFormatter": "esbenp.prettier-vscode", // 默认格式化程序
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"vsintellicode.modify.editor.suggestSelection": "automaticallyOverrodeDefaultValue",
/* yaml */
"yaml.format.singleQuote": false,
/* vsicons */
"vsicons.dontShowNewVersionMessage": true,
/* security */
"security.workspace.trust.untrustedFiles": "prompt", // 不显示信任引入提示
/* explorer */
"explorer.confirmDragAndDrop": true, // 控制在资源管理器内拖放移动文件或文件夹时是否进行确认
// https://github.com/antfu/vscode-file-nesting-config
// 配置文件归类
"explorer.experimental.fileNesting.enabled": true,
"explorer.experimental.fileNesting.expand": false,
"explorer.experimental.fileNesting.patterns": {
"*.js": "$(capture).js.map, $(capture).min.js, $(capture).d.ts",
"*.jsx": "$(capture).js",
"*.module.ts": "$(capture).resolver.ts, $(capture).controller.ts, $(capture).service.ts",
"*.ts": "$(capture).js, $(capture).*.ts",
"*.tsx": "$(capture).ts",
"*.vue": "$(capture).*.ts, $(capture).*.js",
".env": "*.env, .env.*, env.d.ts",
".gitignore": ".gitattributes, .gitmodules, .gitmessage, .mailmap, .git-blame*",
"index.d.ts": "*.d.ts",
"package.json": ".browserslist*, .circleci*, .codecov, .commitlint*, .editorconfig, .eslint*, .firebase*, .flowconfig, .github*, .gitlab*, .gitpod*, .huskyrc*, .jslint*, .lintstagedrc*, .markdownlint*, .mocha*, .node-version, .nodemon*, .npm*, .nvmrc, .pm2*, .pnp.*, .pnpm*, .prettier*, .releaserc*, .sentry*, .stackblitz*, .styleci*, .stylelint*, .tazerc*, .textlint*, .tool-versions, .travis*, .vscode*, .watchman*, .xo-config*, .yamllint*, .yarnrc*, api-extractor.json, apollo.config.*, appveyor*, ava.config.*, azure-pipelines*, bower.json, build.config.*, commitlint*, crowdin*, cypress.json, dangerfile*, dprint.json, firebase.json, grunt*, gulp*, jasmine.*, jenkins*, jest.config.*, jsconfig.*, karma*, lerna*, lint-staged*, nest-cli.*, netlify*, nodemon*, nx.*, package-lock.json, playwright.config.*, pm2.*, pnpm*, prettier*, pullapprove*, puppeteer.config.*, renovate*, rollup.config.*, stylelint*, tsconfig.*, tsdoc.*, tslint*, tsup.config.*, turbo*, typedoc*, vercel*, vetur.config.*, vitest.config.*, webpack.config.*, workspace.json, xo.config.*, yarn*",
"vite.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .htmlnanorc*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, cssnano.config.*, cypress.json, env.d.ts, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*",
"vue.config.*": "*.env, .babelrc*, .codecov, .cssnanorc*, .env.*, .htmlnanorc*, .mocha*, .postcssrc*, .terserrc*, api-extractor.json, ava.config.*, babel.config.*, cssnano.config.*, cypress.json, env.d.ts, htmlnanorc.*, jasmine.*, jest.config.*, jsconfig.*, karma*, playwright.config.*, postcss.config.*, puppeteer.config.*, svgo.config.*, tailwind.config.*, tsdoc.*, unocss.config.*, vitest.config.*, webpack.config.*, windi.config.*"
},
/* debug */
// 断点调试时,遇到断点,自动显示调试视图。
"debug.openDebug": "openOnDebugBreak",
// prettier 设置
"prettier.semi": false, // 设置分号
"prettier.singleQuote": true, // 强制单引号
"prettier.trailingComma": "none", // 禁止随时添加逗号
/* Path Intellisense */
"path-intellisense.mappings": {
"@": "${workspaceRoot}/src",
"/": "${workspaceRoot}/"
},
// 上述配置一般要配合在package.json的同级文件添加jsconfig.json文件,加上以下配置:
// {
// "compilerOptions": {
// "target": "ES6",
// "module": "commonjs",
// "allowSyntheticDefaultImports": true,
// "baseUrl": "./",
// "paths": {
// "@/*": [
// "src/*"
// ]
// }
// },
// "exclude": [
// "node_modules"
// ]
// }
/* eslint */
"eslint.enable": true,
// 自动设定eslint工作区
"eslint.format.enable": true,
"eslint.codeAction.showDocumentation": {
"enable": true
},
// eslint配置文件 ,修改为你自己电脑上的文件位置,或者直接删除
"eslint.options": {
"configFile": "E:/tanwan-file/tool-library/IDE/.eslintrc.js",
"plugins": ["html"]
},
"eslint.workingDirectories": [{ "mode": "auto" }],
"eslint.alwaysShowStatus": true,
"eslint.packageManager": "yarn",
// 老版本的定义校验的类型
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"json",
"html",
"vue",
"markdown"
],
// 新版本的定义校验的类型
"eslint.probe": ["javascript", "javascriptreact", "typescript", "typescriptreact", "json", "html", "vue", "markdown"],
/* emmet */
// 这一设置最大作用是:当输入的文本不属于Emmet定义的缩写规则时,依然允许使用Tab键进行缩进。此时会提示我自定义的缩写语句,以及各插件自定义的缩写语句.
"emmet.triggerExpansionOnTab": true,
"emmet.showSuggestionsAsSnippets": true,
// 配置emmet对哪种文件类型支持
"emmet.syntaxProfiles": {
"javascript": "jsx",
"vue-html": "html",
"vue": "html",
"xml": {
"attr_quotes": "single"
}
},
"emmet.includeLanguages": {
"jsx-sublime-babel-tags": "javascriptreact",
"wxml": "html"
},
/* vetur -> Vue2高亮 */
"vetur.grammar.customBlocks": {
"docs": "md",
"i18n": "json"
},
"vetur.format.options.tabSize": 2,
"vetur.format.options.useTabs": false,
"vetur.format.defaultFormatter.html": "prettier",
"vetur.format.defaultFormatter.pug": "prettier",
"vetur.format.defaultFormatter.css": "prettier",
"vetur.format.defaultFormatter.postcss": "prettier",
"vetur.format.defaultFormatter.scss": "prettier",
"vetur.format.defaultFormatter.less": "prettier",
"vetur.format.defaultFormatter.stylus": "stylus-supremacy",
"vetur.format.defaultFormatter.js": "prettier",
"vetur.format.defaultFormatter.ts": "prettier",
"vetur.format.defaultFormatter.sass": "sass-formatter",
"vetur.format.defaultFormatterOptions": {
"wrap_attributes": "auto",
"prettier": {
"printWidth": 120,
"tabWidth": 2 /* Specify the number of spaces per indentation-level. */,
"useTabs": false /* Indent lines with tabs instead of spaces. */,
// Print semicolons at the ends of statements.
"semi": true,
"singleQuote": true,
// such as, as-needed: {true: 0,0: 0,'qux-lorem': true};"consistent": 强制执行一致的引用风格需要引用对象字面值属性名称;preserve:保留用户输入
"quoteProps": "as-needed",
"jsxSingleQuote": true,
// es5: Trailing commas where valid in ES5 (objects, arrays, etc.)
"trailingComma": "es5",
// Print spaces between brackets in object literals. true Example: { foo: bar }.
"bracketSpacing": true,
// Put the > of a multi-line JSX element at the end of the last line instead of being alone on the next line (does not apply to self closing elements).
"jsxBracketSameLine": false,
// "always" - Always include parens. Example: (x) => x
// "avoid" - Omit parens when possible. Example: x => x
"arrowParens": "always",
/* Range start */
"rangeStart": 0,
// "rangeEnd": Infinity,
/* Range end */
// parser:'babylon', /* 默认不打开 */
/*
Specify which parser to use.
parser: 'None'|'babel',
Specify the file name to use to infer which parser to use.
filepath: 'None'|<string>,
指定某片段格式化。Prettier can restrict itself to only format files that contain a special comment, called a pragma, at the top of the file.
*/
"requirePragma": false,
// 指定某个文件已被格式化,配合requirePragma使用。Prettier can insert a special @format marker at the top of files specifying that the file has been formatted with prettier.
"insertPragma": false,
// "always" - Wrap prose if it exceeds the print width.
// "never" - Do not wrap prose.
// "preserve" - Wrap prose as-is. First available in v1.9.0
"proseWrap": "preserve",
// "css" - Respect the default value of CSS display property.
"htmlWhitespaceSensitivity": "ignore",
"vueIndentScriptAndStyle": false,
"endOfLine": "lf",
// Format embedded code if Prettier can automatically identify it.
"embeddedLanguageFormatting": "auto",
// for IDE attriubte start
"wrap_attributes": "force-aligned",
"end_with_newline": true
// for IDE attriubte end
}
},
/* minapp */
"minapp-vscode.disableAutoConfig": true,
/* prettier */
"prettier.configPath": "E:\\tanwan-file\\tool-library\\IDE\\prettier.config.js" /* tanwanpc-desk */,
/* stylusSupremacy */
"stylusSupremacy.insertColons": false, // 是否插入冒号
"stylusSupremacy.insertSemicolons": false, // 是否插入分好
"stylusSupremacy.insertBraces": false, // 是否插入大括号
"stylusSupremacy.insertNewLineAroundImports": false, // import之后是否换行
"stylusSupremacy.insertNewLineAroundBlocks": false, // 两个选择器中是否换行
/* fileheader */
// 快捷方式如果没响应则需要在vscode键盘快捷方式搜索cursorTip查看快键键
// fileheader 文件头部注释 快捷键:window:ctrl+alt+i,mac:ctrl+cmd+i
"fileheader.customMade": {
"Description": "",
"version": "",
"Author": "liejiayong(809206619@qq.com)",
"Date": "Do not edit",
"LastEditors": "liejiayong(809206619@qq.com)",
"LastEditTime": "Do not Edit",
"FilePath": "Do not edit", // 设置后,默认生成文件相对于项目的路径
"custom_string_obkoro1": "可以输入预定的版权声明、个性签名、空行等"
},
// fileheader 函数注释 快捷键:window:ctrl+alt+t,mac:ctrl+cmd+t
"fileheader.cursorMode": {
"description": "",
"param": "",
"return": "",
"author": "liejiayong(809206619@qq.com)",
"Date": "Do not edit"
},
// fileheader 配置项
"fileheader.configObj": {
"autoAdd": false, // 检测文件没有头部注释,自动添加文件头部注释
"autoAddLine": 100, // 文件超过多少行数 不再自动添加头部注释
"autoAlready": true, // 只添加插件支持的语言以及用户通过`language`选项自定义的注释
// 自动添加头部注释黑名单
"prohibitAutoAdd": ["json"],
"prohibitItemAutoAdd": ["项目的全称禁止项目自动添加头部注释, 使用快捷键自行添加"],
"wideSame": false, // 头部注释等宽设置
"wideNum": 13, // 头部注释字段长度 默认为13
// 头部注释第几行插入
"headInsertLine": {
"php": 2 // php文件 插入到第二行
},
"beforeAnnotation": {}, // 头部注释之前插入内容
"afterAnnotation": {}, // 头部注释之后插入内容
"specialOptions": {}, // 特殊字段自定义
"switch": {
"newlineAddAnnotation": true // 默认遇到换行符(\r\n \n \r)添加注释符号
},
"moveCursor": true, // 自动移动光标到Description所在行
"dateFormat": "YYYY-MM-DD HH:mm:ss",
"atSymbol": "@", // 更改所有文件的自定义注释中的@符号
"atSymbolObj": {
"js": "@", // .js文件 去掉@
"java": "#" // .java文件 @改为#
}, // 更改单独语言/文件的@
"colon": ": ", // 更改所有文件的注释冒号
"colonObj": {
"js": ": " // .js文件 去掉: 留一个空格
}, // 更改单独语言/文件的冒号
"filePathColon": "路径分隔符替换", // 默认值: mac: / window是: \
"showErrorMessage": false, // 是否显示插件错误通知 用于debugger
"CheckFileChange": false, // 单个文件保存时进行diff检查
"createHeader": false, // 新建文件自动添加头部注释
"useWorker": false, // 是否使用工作区设置
"designAddHead": false, // 添加注释图案时添加头部注释
// 自定义语言注释符号,覆盖插件的注释格式
"language": {
"java": {
"head": "/$$",
"middle": " $ @",
"end": " $/"
},
// 一次匹配多种文件后缀文件 不用重复设置
"h/hpp/cpp": {
"head": "/*** ", // 统一增加几个*号
"middle": " * @",
"end": " */"
},
// 针对有特殊要求的文件如:test.blade.php
"blade.php": {
"head": "<!--",
"middle": " * @",
"end": "-->"
}
},
// 默认注释 没有匹配到注释符号的时候使用。
"annotationStr": {
"head": "/*",
"middle": " * @",
"end": " */",
"use": false
}
},
/* autoprefixer -> css */
"autoprefixer.formatOnSave": true,
"autoprefixer.browsers": ["last 8 versions", "> 0.01%"],
// 设置autoprefixer 为zhi有.css 情况下才能保存生成兼容前缀
"autoprefixer.ignoreFilesOnSave": [
"**/src/**.scss",
"**/scss/**.scss",
"**/css/**.scss",
"**/style/**.scss",
"**/assets/**.scss",
"**/common/**.scss",
"**/src/**.less",
"**/scss/**.less",
"**/css/**.less",
"**/style/**.less",
"**/assets/**.less",
"**/common/**.less",
"**/src/**.sass",
"**/scss/**.sass",
"**/css/**.sass",
"**/style/**.sass",
"**/assets/**.sass",
"**/common/**.sass",
"**/src/**.styl",
"**/scss/**.styl",
"**/css/**.styl",
"**/style/**.styl",
"**/assets/**.styl",
"**/common/**.styl"
],
/* liveSassCompile */
"liveServer.settings.CustomBrowser": "chrome",
// liveSassCompile start
"liveSassCompile.settings.showOutputWindow": true, // 热更新
"liveSassCompile.settings.generateMap": true, // 编译map
"liveSassCompile.settings.formats": [
// This is Default.
{
"format": "compact",
"extensionName": ".css", // 指定编译完的文件后缀名,.css为普通代码,.min.css为压缩代码
"savePath": "~/../css" // 指定编译完的css文件路径
}
// You can add more
// {
// "format": "compressed",
// "extensionName": ".min.css",
// "savePath": "~/../css" // 指定编译完的css文件路径
// }
], //指定编译css的样式类型,有这四种 expanded(默认), compact, compressed or nested
"liveSassCompile.settings.excludeList": ["**/node_modules/**", ".vscode/**", "**/_*.scss"], // 指定忽略的文件,支持正则
"liveSassCompile.settings.includeItems": ["**/_index*.scss", "**/index*.scss"],
"liveSassCompile.settings.autoprefix": ["> 0.01%", "last 12 versions"],
/* liveServer */
"liveServer.settings.donotShowInfoMsg": true,
/* git sync */
"sync.gist": "d6f93d4248267f8875353551c3acef8c",
/* language */
"javascript.updateImportsOnFileMove.enabled": "always",
/* python */
"python.jediEnabled": false,
"python.linting.pylintEnabled": true,
"python.linting.enabled": true,
"python.languageServer": "Default"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453